我需要在wp7中修剪.wav文件。我有一些代码,但它不起作用。有谁知道如何修剪Windows Phone 7中的wav文件?
以下是我无法使用的代码。
public IsolatedStorageFileStream TrimWavFile(string FileName, TimeSpan cutFromStart, TimeSpan cutFromEnd)
{
long start = Convert.ToInt64((16 / 8) * 16000 * cutFromStart.TotalSeconds);
long end = Convert.ToInt64((16 / 8) * 16000 * cutFromEnd.TotalSeconds);
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream stream = storage.OpenFile(FileName as string, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return TrimWavFile(stream, start, end);
}
private IsolatedStorageFileStream TrimWavFile(IsolatedStorageFileStream reader, long startPos, long endPos)
{
IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream writer = new IsolatedStorageFileStream("t", FileMode.OpenOrCreate,storage);
reader.Position = startPos;
byte[] buffer = new byte[1024];
while (reader.Position < endPos)
{
int bytesRequired = (int)(endPos - reader.Position);
if (bytesRequired > 0)
{
int bytesToRead = Math.Min(bytesRequired, buffer.Length);
int bytesRead = reader.Read(buffer, 0, bytesToRead);
if (bytesRead > 0)
{
writer.Write(buffer, 0, bytesRead);
}
}
Makewav.WriteHeader(writer, (int)writer.Length - 44, 1, 16000);
}
return writer;
}
答案 0 :(得分:1)
首先,当你跳到你的startPos时,看起来你不会考虑wav标题,所以你的位置将会关闭。
其次我猜测可能存在块对齐问题。当你尝试播放时,它是否会以静态形式出现?来自NAudio的一些示例代码显示了如何修剪wav文件(http://mark-dot-net.blogspot.com/2009/09/trimming-wav-file-using-naudio.html),这显示了这一点:
startPos = startPos - startPos % reader.WaveFormat.BlockAlign;
所以你只需要找出你的块对齐大小并尽可能地计算它。与你的最终位置相同。
答案 1 :(得分:0)
我在循环中有波形标题,我将其移出循环,删除了writer.length
中的-44。
我只需要将流回到开头就可以了。
答案 2 :(得分:0)
为了找到标题信息,例如采样率,num样本等,您可能需要阅读WAV文件规范https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
此开源项目http://code.google.com/p/musicg/可能会为您提供参考。它是用Java编写的,但修剪逻辑是一样的。