我尝试使用NAudio将立体声.wav文件转换为单声道。一个要求是我不能使用任何本机调用,因为我需要在Azure上运行此代码。这就是我的意思:
using (var waveFileReader = new WaveFileReader(sourceFileName))
{
var toMono = new StereoToMonoProvider16(waveFileReader);
WaveFileWriter.CreateWaveFile(destFileName, toMono);
}
我的代码没有错误,但输出是一个包含纯静音的文件。
还有其他方法可以将文件转换为单声道吗?
答案 0 :(得分:1)
这段代码对我有用。
public static void StereoToMono(string sourceFile, string outputFile)
{
using (var waveFileReader = new WaveFileReader(sourceFile))
{
var outFormat = new WaveFormat(waveFileReader.WaveFormat.SampleRate, 1);
using (var resampler = new MediaFoundationResampler(waveFileReader, outFormat))
{
WaveFileWriter.CreateWaveFile(outputFile, resampler);
}
}
}
请注意,channels
传递1
参数outFomat
。
答案 1 :(得分:1)
您需要为// CLIENT APP
@FeignClient(name = "media-client", url = "${api.base-path}/media")
public interface MediaClient {
@PostMapping
String uploadMedia(@RequestPart("file") MultipartFile file);
}
// SERVER APP
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
String uploadMedia(@RequestPart MultipartFile file) throws IOException {
Files.copy(file.getInputStream(), Paths.get("/home/m/Desktop").resolve(UUID.randomUUID().toString() + ".jpg"));
return null;
}
的{{1}}和LeftVolume
属性提供值。例如,将它们设置为0.5f以混合通道,或将左侧设置为1.0,将右侧设置为0.0以丢弃右侧通道
答案 2 :(得分:0)
这段代码对我有用,甚至在Azure上也是如此:
private void ConvertToMono(string sourceFileName, string destFileName) {
var monoFormat = new WaveFormat(44100, 1);
using (var waveFileReader = new WaveFileReader(sourceFileName))
{
var floatTo16Provider = new WaveFloatTo16Provider(waveFileReader);
using (var provider = new WaveFormatConversionProvider(monoFormat, floatTo16Provider))
{
WaveFileWriter.CreateWaveFile(destFileName, provider);
}
}
}
请注意,我正在使用其他转换器(WaveFloatTo16Provider
),因为源是浮点格式。