![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| mishapk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.1.2012 Репутация: нет Всего: нет |
Добрый день.
Имеется устройство при подачи на которое через порт RS232 поблочно wav файл, на устройстве происходит его воспроизведение. Проблема в том, что с какой скоростью мы этот файл зальем с такой скоростью он и воспроизведется. 1. Подскажите как вычислить задержку что бы она соответствовала реальности. На мой слух задержка равна 20мл.сек.
2. Сопутствующий вопрос. Как из фала wav извлечь data раздел - пропустить заголовок и если есть что то в конце пропустить его тоже. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
1) Очевидно, что разница между записью в миллисекундах должна быть равна 1000*samplecount/samplerate, где samplecount -- сколько звуковых значений пишэтся в порт за один раз, в Вашэм примере 320 / 1, 2 или 4 в зависимости от количества бит в аудиопотоке .wav-файла (/1 или /2 для 8-бит и /2 или /4 для 16-бит) и количества каналов (/1 или /2 в моно- и /2 или /4 в стереофайле), а samplerate -- частота дискретизацыи, в Вашэм примере -- из метаинформацыи .wav-файла.
Замечу, что простые устройства воспроизведения (а у Вас, кажэтся, именно простое) требуют одного конретного формата, и если данные в .wav-файле им не соответствуют, то требуется их перекодировать. Для количества каналов (ну, в пределах 2-х) это просто, для разрешэния -- тожэ. Смена частоты дискретизацыи требует некоторых мыслительных затрат. 2) Возьмите какую-нибудь библиотеку для чтения .wav, например, libsndfile. Добавлено через 1 минуту и 3 секунды 1) Очевидно, что разница между записью в миллисекундах должна быть равна 1000*samplecount/samplerate, где samplecount -- сколько звуковых значений пишэтся в порт за один раз, в Вашэм примере 320 / 1, 2 или 4 в зависимости от количества бит в аудиопотоке .wav-файла (/1 или /2 для 8-бит и /2 или /4 для 16-бит) и количества каналов (/1 или /2 в моно- и /2 или /4 в стереофайле), а samplerate -- частота дискретизацыи, в Вашэм примере -- из метаинформацыи .wav-файла. Замечу, что простые устройства воспроизведения (а у Вас, кажэтся, именно простое) требуют одного конретного формата, и если данные в .wav-файле им не соответствуют, то требуется их перекодировать. Для количества каналов (ну, в пределах 2-х) это просто, для разрешэния -- тожэ. Смена частоты дискретизацыи требует некоторых мыслительных затрат. 2) Возьмите какую-нибудь библиотеку для чтения .wav, например, libsndfile. Добавлено через 3 минуты и 5 секунд 1) Очевидно, что разница между записью в миллисекундах должна быть равна 1000*samplecount/samplerate, где samplecount -- сколько звуковых значений пишэтся в порт за один раз, в Вашэм примере 320 / 1, 2 или 4 в зависимости от количества бит в аудиопотоке .wav-файла (/1 или /2 для 8-бит и /2 или /4 для 16-бит) и количества каналов (/1 или /2 в моно- и /2 или /4 в стереофайле), а samplerate -- частота дискретизацыи, в Вашэм примере -- из метаинформацыи .wav-файла. Замечу, что простые устройства воспроизведения (а у Вас, кажэтся, именно простое) требуют одного конретного формата, и если данные в .wav-файле им не соответствуют, то требуется их перекодировать. Для количества каналов (ну, в пределах 2-х) это просто, для разрешэния -- тожэ. Смена частоты дискретизацыи требует некоторых мыслительных затрат. 2) Возьмите какую-нибудь библиотеку для чтения .wav, например, libsndfile. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Модератор: Сообщение скрыто. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mishapk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.1.2012 Репутация: нет Всего: нет |
Не совсем понял. В общем формат файла 16 бит 8 кгц моно, 128 кбит/ сек. Как теперь подсчитать?
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
вроде ж несложно: за 1/8000 секунды должно уйти 2 байта. такую задержку Sleep'ом не сделаешь. вот, лови
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| mishapk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 26.1.2012 Репутация: нет Всего: нет |
Наверное 320/16=20
Добавлено через 4 минуты и 3 секунды Именно Sleep(20) на слух в самый раз при 320 байт в сек на порт |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
1000*(320/2)/8000. Но учтите, это -- разница между записью (в миллисекундах). Поскольку на read/write уходит некоторое время, лучшэ воспользоваться функцыями времени для определени задержки или спецыальными таймерами.
|
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |