Я работаю над музыкальным проектом, где мне нужно объединить несколько файлов WAV. Мой код работает отлично, но вы слышите явно щелчок между двумя связанными файлами WAV. Это огромная проблема.Нажатие на шум при конкатенировании/объединении двух или более файлов WAV
Я инженер по аудио. Когда я работаю, например, последовательные сэмплы в DAW (Digital Audio Workstation), и я хочу предотвратить этот щелканье между двумя образцами WAV, тогда мне нужно создать перекрестное затухание (в основном это затухание первого образца и постепенное исчезновение следующего образца).
Поэтому мой вопрос был бы, если бы я мог создать такой кроссовер, затухающий при конкатенации двух файлов WAV. Мне нужно избавиться от щелкающего шума между конкатенированными волновыми файлами.
Я предоставляю свой код C# ниже, как я объединяю файлы WAV. Это работает для файлов WAV, которые находятся в одном и том же формате. Я нашел этот фрагмент кода (How to join 2 or more .WAV files together programatically?). Далее я нашел это FadeIn/FadeOut possibility, но я не знаю, как применить это к коду. Кроме того, я не знаю, предотвратит ли это шум щелчка.
Благодарим за советы и решение. Надеюсь, Марк Хит читает это :).
С наилучшими пожеланиями, Alex
Формат Wavefile:
AverageBytesPerSecond: 264600 | BitsPerSample: 24 | BlockAlign: 6 | Каналы: 2 | Кодировка: PCM | Дополнительный размер: 0 | SampleRate: 44100 |
public static void Concatenate(string outputFile, IEnumerable<string> sourceFiles)
{
byte[] buffer = new byte[6]; //1024 was the original. but my wave file format has the blockAlign 6. So 1024 was not working for me. 6 does.
WaveFileWriter waveFileWriter = null;
try
{
foreach (string sourceFile in sourceFiles)
{
using (WaveFileReader reader = new WaveFileReader(sourceFile))
{
if (waveFileWriter == null)
{
// first time in create new Writer
waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat);
}
else
{
if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat))
{
throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format");
}
}
int read;
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
waveFileWriter.WriteData(buffer, 0, read);
}
}
}
}
finally
{
if (waveFileWriter != null)
{
waveFileWriter.Dispose();
}
}
}
Если предположить, что код заботится о заголовках (пропуск 2-ой и изменении 1-й друга задайте количество образцов для образцов1 + samples2 - crossfadeLenght), чтобы создать перекрестное затухание, которое вам нужно: принять решение о количестве образцов, которые нужно использовать, а затем, хорошо исчезать с 100% + 0% до 0% + 100% для каждого. . – TaW
Благодарим за помощь. Я объясню это с вашей маленькой концепцией. Кроме того, я нашел это: http://www.codeproject.com/Articles/35725/C-WAV-file-class-audio-mixing-and-some-light-audio Возможно, это тоже помогает мне. – Alex
Да, это звучит полезно и, вероятно, стоит изучать. В последний раз, когда я играл с волновыми файлами, я обнаружил, что очень просто ввести глупые артефакты, например. не сглаживая ошибки округления. Удачи! – TaW