странный тикающий звук в wav файле

Я записываю звук в файл wav, а также передаю его на динамики (c++, vs2010, win7). когда я слышу это в динамиках, я слышу чистый звук, но когда я записываю его в файл wav, к звуку добавляется странный тикающий/электрический шум, я пытаюсь открыть файл, используя смелость, и я ясно вижу, что есть пик каждые 0,05 сек. я не знаю, откуда добавился шум, вы можете мне помочь?

я добавил запись в файл из моего кода:

writeWav(char *filename,short *data) 
{ 
     FILE *wav; 
     wav = fopen(filename,"ab+"); 
     for(int i=0;i<1024;i++) 
     { 
        writeLE(data[i],2,wav); 
     } 
     fclose(wav); 
} 

void writeLE(short data,int nBytes,FILE *wav) //write in little-endian
{ 
     unsigned buf; 
     while(nBytes > 0) 
     { 
         buf = word & 0xff; 
         fwrite(&buf,1,1,wav); 
         nBytes--; 
         word >>= 8; 
     } 
}

функция writeWav вызывается каждый раз при получении пакета (размер = 1024).


person David    schedule 24.03.2013    source источник
comment
Я получаю его от приемника в потоке Udp, получая пакеты аудио. Отправляю одни и те же данные на колонки и в файл. Я уверен, что-то в том, что я написал, данные хорошие.   -  person David    schedule 24.03.2013


Ответы (1)


Похоже, ваш цикл for неверен.

Для обработки 1024 элементов необходимо:

for (int i = 0; i < 1024; i++)
person Simon Jenkins    schedule 24.03.2013
comment
Извините, я опечатался здесь. В моем коде это написано как 1024. Сейчас я отредактировал код - person David; 24.03.2013
comment
Не поэтому ли параметр writeLE называется данными, но в теле упоминается как слово? - person Simon Jenkins; 24.03.2013
comment
Это просто имя var. Что еще это может означать? - person David; 24.03.2013
comment
Нет слова с именем var. - person Simon Jenkins; 24.03.2013
comment
В функции writeLE первая строка — это объявление слова var. - person David; 24.03.2013
comment
А как насчет: word ››= 8; - person Simon Jenkins; 24.03.2013
comment
Это часть моего кода. Я опечатался извините. я отредактировал сообщение - person David; 24.03.2013
comment
какая у вас частота дискретизации? - person fatihk; 24.03.2013
comment
Частота дискретизации 44100 - person David; 24.03.2013
comment
кажется, что посторонние данные добавляются для каждых 2 блоков, вы уверены, что не выполняете никаких файловых операций, кроме указанных здесь? - person fatihk; 24.03.2013
comment
Я пишу только в конце заголовок файла. Но даже если я возьму только необработанные данные, все равно будет тикающий шум. Какие внешние данные добавляются? Где написано? - person David; 24.03.2013
comment
Щекотка связана с одним пиком образца? если это так, попробуйте записать в файл 1023 сэмпла, изменив на i ‹ 1023 - person fatihk; 24.03.2013
comment
Это с аудиоинтерфейсом USB? Вы уверены, что все полученные пакеты состоят из 1024 слов? Например, если бы каждый второй пакет был 1022, вы бы записывали в свой файл дополнительное слово с конца буфера. - person Simon Jenkins; 24.03.2013
comment
Появляется около 20 семплов, создающих пик. Но я не уверен, как рассчитать, сколько образцов создают пик - person David; 24.03.2013
comment
Да, это usb-интерфейс. Данные хорошие, я отчетливо слышу их в динамиках при потоковой передаче. - person David; 24.03.2013
comment
Некоторые данные буфера могут быть пустыми, тогда вы можете просто записать около 1000 сэмплов и наблюдать за результатами. - person fatihk; 24.03.2013
comment
Вы уверены, что при каждом вызове writeWav в буфере данных содержится ровно 1024 выборки? Вы не передаете аргумент размера, но позже предполагаете, что в writeLE всегда есть 1024 выборки. - person sizzzzlerz; 24.03.2013
comment
Я проверил это, прежде чем вызывать функцию записи - person David; 24.03.2013
comment
если вы можете добавить полные версии своих методов, вы можете получить более конструктивные ответы - person fatihk; 24.03.2013
comment
Можете ли вы записать образцы в необработанный двоичный файл, а не в wav-файл. Не конвертируйте в LE. Не массируйте образцы вообще. Оказавшись в файле, импортируйте его в Audacity как необработанный файл. Вам нужно будет указать частоту дискретизации, размер и конечность. Глюк все еще появляется? - person sizzzzlerz; 24.03.2013
comment
Я попытался записать данные в файл excel и заметил, что каждые 200 выборок есть пик - person David; 24.03.2013