因此,我正在嘗試讀取.wav文件的幅度數據,以便稍後在DFT中使用它,並使用此代碼獲取C#中的幅度數據,以及把它放到一個txt文件以一定的間隔從WAV文件中讀取幅度數據
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NAudio.Wave;
namespace SoundToAmplitudes
{
class Program
{
private static int Main(string[] args)
{
#if DEBUG
Console.WriteLine(String.Join(", ", args));
args = new[] { @"C:\Users\s550c\Documents\visual studio 2010\Projects\DFT\DFT\newrecord.wav" };
#endif
return Cli(args);
}
static int Cli(string[] args)
{
System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\test6.txt");
string fileName = args[0];
var soundFile = new FileInfo(fileName);
foreach (float s in AmplitudesFromFile(soundFile))
{
Console.WriteLine(s);
file.WriteLine(s);
}
file.Close();
//Console.WriteLine();
#if DEBUG
Console.Read();
#endif
return 0;
}
public static IEnumerable<float> AmplitudesFromFile(FileInfo soundFile)
{
var reader = new AudioFileReader(soundFile.FullName);
int count = 4096; // arbitrary
float[] buffer = new float[count];
int offset = 0;
int numRead = 0;
while ((numRead = reader.Read(buffer, offset, count)) > 0)
{
foreach (float amp in buffer.Take(numRead))
{
yield return amp;
}
}
}
}
}
程序給我約1秒聲音文件數據的一個長長的清單,(145920個數據是精確的),所以我的問題是這樣的:
每個數據之間的時間間隔是多少? (如1^-10秒或smt?),我怎麼知道它?
如果我想自己設置每個數據之間的間隔,應該如何更改代碼?
我沒跟着。你爲什麼要把波形文件樣本當作浮點數來處理?假設你試圖打開未壓縮的PCM文件,緩衝區應該是短整型。看起來你只是發現了一些代碼,並不知道如何使用它。你知道標題有多少樣本。我假設你的AudioFileReader應該加載這種信息。 – Tarec
是的,例如我將間隔設置爲0.01秒,那麼我得到的數據將是0秒處的幅度; 0.01秒; 0.02秒等等。 – Megazero
@Tarec是的,就像我說過的我從未玩過音頻文件,所以我完全瞎了這些東西是如何工作的。我不能將它改爲short,因爲來自NAudio庫的函數AudioFileReader.Read需要浮動 – Megazero