Я пытался решить проблему, в которой я застрял несколько недель! По сути, программное обеспечение, которое я разрабатываю, может записывать аудио, а затем воспроизводить его. Программное обеспечение может записывать несколько звуковых файлов, а затем воспроизводить их один за другим (создавая впечатление, что это 1 непрерывный звуковой файл). Однако проблема, с которой я сталкиваюсь, заключается в том, что, начиная со второго звукового файла, кажется, что есть «галочка» поверх второго, третьего, четвертого (и т. Д.) Файла.
Эта отметка - последние несколько миллисекунд первого звукового файла. «Тиканье», на которое я ссылаюсь, похоже на звук пропуска очень быстрой виниловой пластинки.
Пока мне не удалось найти корень проблемы, есть ли у кого-нибудь какие-либо идеи относительно того, что может быть причиной этого?
Спасибо
РЕДАКТИРОВАТЬ: Добавлены некоторые методы ниже.
Хорошо, поэтому следующий метод является методом воспроизведения.
public override void Replay(long time)
{
if(this.StartTime <= time && this.EndTime >= time && (Speed >= 0.95 && Speed <= 1.05))
{
if (!locked)
{
locked = true;
//close the previous stream
CloseWaveOut();
//open the file
waveOut = new NativeDirectSoundOut(latency);
mainOutputStream = CreateInputStream(outputFilename);
if (waveOut != null && mainOutputStream != null)
{
//set the time position
long offset = time - StartTime;
if (offset > 0)
{
mainOutputStream.CurrentTime = TimeSpan.FromMilliseconds(Convert.ToDouble(offset));
}
//CurrentTime = TimeSpan.FromMilliseconds(Convert.ToDouble(time - StartTime));
waveOut.Init(mainOutputStream);
((WaveChannel32)mainOutputStream).Volume = Volume;
Console.WriteLine("waveOut Playing"); // Debugging purposes
waveOut.Play();
}
}
}
}
Следующий метод является методом записи:
public override void Record(long time)
{
if (waveInStream == null && writer == null && !recorded)
{
//for record
writer = new WaveFileWriter(outputFilename, recordingFormat);
waveInStream = new WaveInStream(deviceNumber, recordingFormat, null);
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.StartRecording();
this.StartTime = time;
Console.Out.WriteLine("Record Method called"); // Debugging Purposes
}
}