Вопрос

Я записываю необработанные аудиобайты из двух файлов в новый wav-файл, чтобы объединить эти два файла.Результирующий файл, который создается, содержит содержимое обоих аудиоклипов, но в файле также много шума.

Может кто-нибудь указать мне на хороший пример, который показывает, как записать необработанные аудиобайты в файл?Вот основная логика, которой я следую

SInt32 leftSample1 = ReadSampleFromFile1(music_iter1);
leftSample1 = (SInt32)((float) leftSample1 * 0.7071); //to avoid clipping

SInt32 leftStereoSample2 = ReadLeftSample(music_iter2);
leftStereoSample2 += leftSample1;
if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;
// write leftStereoSample2 to the file
//do the same as left sample to right sample also

++music_iter2;
++music_iter1;

Спасибо.

Это было полезно?

Решение

сколько раз они возвращаются истинными?

if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;

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

core audio имеет микшеры.умные люди уже написали код для работы с подобными вещами, так что нам не нужно :) Многоканальный микшер - это тот, который выполняет стереомикширование.зацени это.

Другие советы

Ваши тесты для 65535 и -65536 неверны (потребуется 17 бит).Попробуйте 32767 и -32768.

Я не уверен, что строка кода для "предотвращения отсечения" действительно выполняет свою работу;разве вам не нужно было бы эффективно отказаться и то, и другое потоки, прежде чем присоединиться к ним?

Попробуйте объединить два гораздо более тихих файла.И вместо 0.7071 для обоих файлов попробуйте 0.5.Или просто используйте MultiChannelMixer, как предложил Аран.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top