- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个立体声音频文件。将它转换为单声道只是跳过每隔一个字节(在标题之后)的情况吗?它以 16 位签名的 PCM 格式编码。我有可用的 javax.sound.sampled
。
这是我试过但不起作用的代码:
WaveFileWriter wfw = new WaveFileWriter();
AudioFormat format = new AudioFormat(Encoding.PCM_SIGNED, 44100, 16, 2, 2, 44100, false);
AudioFormat monoFormat = new AudioFormat(Encoding.PCM_SIGNED, 44100, 16, 1, 2, 44100, false);
byte[] audioData = dataout.toByteArray();
int length = audioData.length;
ByteArrayInputStream bais = new ByteArrayInputStream(audioData);
AudioInputStream stereoStream = new AudioInputStream(bais,format,length);
AudioInputStream monoStream = new AudioInputStream(stereoStream,format,length/2);
wfw.write(monoStream, Type.WAVE, new File(Environment.
getExternalStorageDirectory().getAbsolutePath()+"/stegDroid/un-ogged.wav"));
此代码是在使用 Jorbis 读取 .ogg
文件并将其转换为 PCM 数据后使用的。唯一的问题是结果是立体声,我需要它是单声道的,所以如果有其他解决方案,我很高兴听到它!
最佳答案
I have an audio file which is stereo. Is converting it to mono just a case of skipping every other byte (after the header)?
几乎-您想跳过所有其他样本,而不是字节。在您的情况下,看起来每个样本的大小都是 16 位 = 2 字节。所以你会想取 2 个字节,跳过 2 个字节,取 2 个字节等等。
AudioInputStream monoStream = new AudioInputStream(stereoStream,format,length/2);
wfw.write(monoStream, Type.WAVE, new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/stegDroid/un-ogged.wav"));
这看起来您只是写出了文件的前半部分,而不是写出了所有其他样本。您还必须修复 WAV header ,以指定单个 channel (请参阅您的 monoFormat
)。
关于java - PCM 波形文件 - 立体声到单声道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4714542/
我想在我的 android 应用程序中播放 PCM 音频数据。网络上有很多示例,但仅用于单 channel ,我有 4 个 channel (如本问题标题所述)。 当我设置 AudioTrack au
我正在尝试通过 channelsplitter 将立体声音频路由到具有增益控制的 6 个 channel ,然后返回到 channelMerger,以控制 5.1 组的所有 6 个 channel .
我试图从 iPhone XS 的所谓立体声后置麦克风中获取两个 channel ,但在 AVAudioSession 的不同点上只能看到一个 channel 。和 AVAudioSessionPort
我是一名优秀的程序员,十分优秀!