синхронизация звука в C или Python - PullRequest
1 голос
/ 06 февраля 2010

Я бы хотел воспроизвести звук и иметь какой-то способ достоверно сказать, сколько из него уже было воспроизведено. Я просмотрел несколько библиотек звуков, но все они ужасно недокументированы и, похоже, экспортируют только подпрограмму «PlaySound, без вопросов».

То есть, я хочу это:

a = Sound(filename)  
PlaySound(a);  
while true:  
    print a.miliseconds_elapsed, a.length  
    sleep(1)  

C, C ++ или Python решения предпочтительнее. Спасибо.

Ответы [ 3 ]

0 голосов
/ 08 февраля 2010

Я использую BASS Audio Library (http://www.un4seen.com/)

BASS - аудио библиотека для использования в программном обеспечении Windows и Mac OSX. Его цель - предоставить разработчикам мощный и эффективный сэмпл, поток (MP3, MP2, MP1, OGG, WAV, AIFF, сгенерированный пользователем и т. Д. С помощью надстроек), MOD музыку (XM, IT, S3M, MOD, MTM, UMX), музыка MO3 (сжатые MOD / MP3 / OGG) и функции записи. Все в крошечной DLL, размером менее 100 КБ . *

Программа на C, использующая BASS, так же проста, как

HSTREAM str;
BASS_Init(-1,44100,0,0,NULL);
BASS_Start();
str=BASS_StreamCreateFile(FALSE,filename,0,0,0);
BASS_ChannelPlay(str,FALSE);
while (BASS_ChannelIsActive(str)==BASS_ACTIVE_PLAYING) {
  pos=BASS_ChannelGetPosition(str,BASS_POS_BYTE);
}
BASS_Stop();
BASS_Free();
0 голосов
/ 11 февраля 2010

Я также ищу хорошую Audiolibrary, где я могу напрямую написать в буфере звуковых карт. У меня еще не было времени взглянуть на него, но pyAudio выглядит довольно мило. Если вы прокрутите страницу вниз, вы увидите пример, похожий на ваш.

С помощью размера буфера, количества каналов и частоты дискретизации вы можете легко рассчитать время, которое длится каждый шаг цикла, и распечатать его.

0 голосов
/ 06 февраля 2010

Скорее всего, это будет зависеть как от аппаратного обеспечения (звуковая карта и т. Д.), Так и от ОС (размер буферов, используемых ОС и т. Д.).

Может быть, было бы полезно, если бы вы немного подробнее рассказали о том, чего вы действительно пытаетесь достичь, а также о том, можем ли мы сделать какие-либо предположения о том, на каком оборудовании и ОС это будет работать?

Одно из возможных решений: предположим, что звук начинает воспроизводиться более или менее немедленно, а затем используйте достаточно точный таймер, чтобы определить, сколько звука воспроизводится (поскольку он будет иметь известную фиксированную частоту дискретизации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...