簡體   English   中英

AcmNotPossible調用acmStreamOpen錯誤

[英]AcmNotPossible calling acmStreamOpen Error

在我的應用程序中,我有一些.wav格式的音頻文件,在這里,我正在檢查每個音頻文件BitRate ,如果有任何文件低於128Kbps,我會使用下面的代碼將這些文件的比特率更改為128kbps

int bitrate;
string FullPath = @Server.MapPath("~/AudioFiles/");
string[] filePaths = Directory.GetFiles(FullPath, "*.wav", SearchOption.AllDirectories);
for (int i = 0; i < filePaths.Length; i++)
{
    string[] FileExt = filePaths[i].Split('\\');
    string[] Ext = FileExt[FileExt.Length - 1].Split('.');
    string ExtFile = Ext[Ext.Length - 1];
    if (ExtFile == "wav" || ExtFile == "WAV")
    {
        using (var reader = new WaveFileReader(filePaths[i]))
        {
            bitrate = reader.WaveFormat.AverageBytesPerSecond * 8;
            reader.Dispose();
        }
        if (bitrate < 128000)
        {
            using (var reader = new WaveFileReader(filePaths[i]))
            {
                var newFormat = new WaveFormat(8000, 16, 1);
                using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
                {
                    WaveFileWriter.CreateWaveFile(Server.MapPath("~/AudioFiles/" + FileExt[FileExt.Length - 1]), conversionStream);
                }
            }
    }
}

上面的代碼適用於大多數文件,但是某些音頻文件卻出現錯誤。 在此處輸入圖片說明 我該如何解決這個問題?

通常,您只能使用ACM一次更改一件東西,因此,如果您有16kHz立體聲文件,則不能一次訪問8kHz單聲道文件。

因此,您需要查看WaveFileReader擁有什么WaveFormat ,並可能需要執行多個轉換步驟。

也可能是您輸入的WAV文件使用的是ACM無法解碼的編解碼器。 但是同樣,您需要檢查輸入的WaveFormat才能知道這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM