Opusdec.exe не может декодировать со стандартного ввода на стандартный выводC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Opusdec.exe не может декодировать со стандартного ввода на стандартный вывод

Сообщение Anonymous »

Я пытаюсь кодировать и декодировать данные opus с помощью opusdec в C#.

Код: Выделить всё

using System.Diagnostics;

List samples = new List();
WaveInEvent waveIn = new WaveInEvent();
WaveOutEvent waveOut = new WaveOutEvent();
waveIn.WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(48000, 2);
waveIn.BufferMilliseconds = 50;
var writer = new WaveFileWriter("output.wav", waveIn.WaveFormat);
waveIn.DataAvailable += (sender, e) =>
{
using (MemoryStream m4 = new MemoryStream())
using (var reader = new RawSourceWaveStream(new MemoryStream(e.Buffer, 0, e.BytesRecorded), waveIn.WaveFormat))
//using (var conversionStream = new WaveFormatConversionProvider(waveIn.WaveFormat, reader))
{
writer.Write(e.Buffer, 0, e.BytesRecorded);
WaveFileWriter.WriteWavFileToStream(m4, reader);
m4.Seek(0, SeekOrigin.Begin);
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "opusenc.exe",
Arguments = "--quiet --speech --bitrate 160 - -",
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false
};
MemoryStream opusBytes = new MemoryStream();
using (Process process = Process.Start(startInfo))
{
process.StandardInput.BaseStream.Write(m4.ToArray());
process.StandardInput.Flush();
byte[] buffer = new byte[1024];
int bytes = 0;
while ((bytes = process.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
{
opusBytes.Write(buffer, 0, bytes);
}
}
Console.WriteLine(m4.Length);
Console.WriteLine(opusBytes.Length);
samples.Add(opusBytes.ToArray());
}
Console.WriteLine("Recording");
};
waveIn.StartRecording();
Console.ReadLine();
waveIn.StopRecording();
Thread.Sleep(1000);
writer.Close();
foreach(var sample in samples)
{
//File.WriteAllBytes("temp.opus", sample);
MemoryStream wavBytes = new MemoryStream();
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "opusdec.exe",
Arguments = "- -",
RedirectStandardInput = true,   // Rediriger l'entrée standard
RedirectStandardOutput = true,
UseShellExecute = false
};
using (Process process = Process.Start(startInfo))
{
process.StandardInput.BaseStream.Write(sample);
process.StandardInput.Close();
byte[] buffer = new byte[1024];
int bytes = 0;
while ((bytes = process.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
{
wavBytes.Write(buffer, 0, bytes);
}
}
wavBytes.Position = 0;
waveOut.Init(new RawSourceWaveStream(wavBytes, new WaveFormat(48000,16,2)));
waveOut.Play();
//Console.ReadLine();
while(waveOut.PlaybackState == PlaybackState.Playing)
{ }
}
но opusdec выдает

Код: Выделить всё

Failed to open '-'.
Если я раскавычу //File.WriteAllBytes("temp.opus", sample); и попытаюсь декодировать файл с помощью cmd и opusdec, все будет работать нормально .
Если я заменю Arguments = "- -", на Arguments = "temp.opus -",, всё работает нормально.
Если я наберу

Код: Выделить всё

    {
FileName = "opusdec.exe",
Arguments = "- test.wav",
RedirectStandardInput = true,   // Rediriger l'entrée standard
RedirectStandardOutput = true,
UseShellExecute = false
};
using (Process process = Process.Start(startInfo))
{
process.StandardInput.BaseStream.Write(File.ReadAllBytes("temp.opus"));
process.StandardInput.Close();
byte[] buffer = new byte[1024];
int bytes = 0;
while ((bytes = process.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length)) > 0)
{
wavBytes.Write(buffer, 0, bytes);
}
}
он ​​также работает нормально.
Все это приводит меня к выводу, что при использовании stdin и stdout с opusdec.exe возникает проблема. Я ошибаюсь?


Подробнее здесь: https://stackoverflow.com/questions/791 ... -to-stdout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»