如何将网络音乐流保存为mp3文件?
本文关键字:mp3 文件 保存 网络 音乐 | 更新日期: 2023-09-27 18:01:40
如何使用NAudio保存流(到达byte[]
样本并编码为PCM)到mp3文件?我已经听说了新的Naudio Lame编码器,但并没有真正理解它。
我已经在网上搜索过了,但没有找到有用的东西。
我现在有什么来播放流:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NAudio;
namespace PLAYER
{
class NAudioPlayer : Player
{
NAudio.Wave.BufferedWaveProvider buf;
NAudio.Wave.IWavePlayer player;
int times = 0;
public int EnqueueSamples(int channels, int rate, byte[] samples, int frames)
{
if (buf == null)
{
buf = new NAudio.Wave.BufferedWaveProvider(new NAudio.Wave.WaveFormat(rate, channels));
NAudio.Wave.WaveOut dso = new NAudio.Wave.WaveOut();
dso.Init(buffer);
dso.Play();
player = dso;
}
int space = buf.BufferLength - buf.BufferedBytes;
if (space > samples.Length)
{
if (times == 0)
times = (times + 1) % 100;
buf.AddSamples(samples, 0, samples.Length);
return frames;
}
return 0;
}
public void Reset()
{
if (buffer != null) buffer.ClearBuffer();
}
}
你可以帮助我,并提供我一个代码片段吗?或者直接告诉我在哪里可以找到有用的片段?
您可以使用NAudio.Lame
中的LameMP3FileWriter
进行编码,将其视为Stream
并向其写入样本。
这里有一个即兴的例子:
LameMP3FileWriter mp3writer = null;
WaveFormat mp3format = null;
public void StartMP3Encoding(string filename, WaveFormat format)
{
if (mp3writer != null)
StopMP3Encoding();
mp3format = format;
mp3writer = new LameMP3FileWriter(filename, format, 128);
}
public void StopMP3Encoding()
{
if (mp3writer != null)
{
mp3writer.Dispose();
mp3writer = null;
}
}
public int EnqueueSamples(int channels, int rate, byte[] samples, int frames)
{
if (mp3writer != null && mp3format.Channels == channels)
mp3writer.Write(samples, 0, samples.Length);
return frames;
}
当开始录制MP3文件时,调用StartMP3Encoding
,并指定要录制的文件名和数据格式。完成后,调用StopMP3Encoding
关闭编码器。在这两者之间,写下你的样品到达时间和时间。
LAME编码器不是时间宝贵的,所以你可以像你喜欢的那样慢地向它传输数据,或者像它需要的那样快地向它发送数据。
LAME编码器在输入采样率和输出比特率的组合中有一些限制,但它可以处理标准值的公平变化。