我有用Vorbis格式编码的音乐,并且还将我的一些专辑编码为新的Opus格式.有没有办法可以将它们复制并播放到我的iPhone上?xiph.org wiki页面说明了vorbis支持,在自由软件方面,它是"正在进行中",虽然它引用了支持Vorbis的无线电流和视频应用程序,但音频支持呢?
总结要求:
[编辑:需要必要的媒体播放器功能]
如何在旧的或与音频格式不兼容的浏览器中播放opus音频.
目前,我在html5 <audio>标签中提供音频链接,该标签适用于Firefox和Chrome,但它不适用于IE,任何版本.
我读过有关opus.js和opusenc.js的文章,它是opusenc工具的JavaScript端口,后者又是使用Emscripten创建的opus-tools集合的一部分.
你知道是否可以在不兼容的浏览器中使用这些JS播放opus音频文件?
此处兼容Opus浏览器
谢谢
我有简单的代码将opus帧解码为音频样本.它适用于Android,但它在Unity3D iOS项目中崩溃,并且在常规iOS项目中不会崩溃.
EXC_BAD_ACCESS (code=1, address=0x2f)
Run Code Online (Sandbox Code Playgroud)
两个项目共享相同的opus静态库和头文件.
#include "opus.h"
int test1(){
unsigned char opus_chunk[] = {0x68, 0x97, 0x50, 0x0d,
0xba, 0xa4, 0x80, 0x0d, 0x31, 0x21, 0x9c, 0xcf, 0x74, 0x98, 0xda, 0xc6,
0xd5, 0x27, 0xcb, 0xd9, 0x51, 0xd7, 0xce, 0x90, 0xc5, 0x58, 0x94, 0x53,
0xb0, 0xe9, 0xb4, 0xe4, 0xf4, 0x42, 0x4d, 0xc7, 0xa4, 0x61, 0xfa, 0xfe};
int len = sizeof(opus_chunk);
short samples[5760];
int err1;
OpusDecoder *decoder;
decoder = opus_decoder_create(48000, 1, &err1);
int n = opus_decode(decoder, opus_chunk, len, samples, 5760, 0);
opus_decoder_destroy(decoder);
} …Run Code Online (Sandbox Code Playgroud) 我有 .wav 文件,我会使用 opus 对它们进行编码,将所有内容写入 .opus 文件中,然后使用 vlc 读取它。我已经使用 opus 琐碎的例子做了一些代码,但质量很差。其实有个问题,我从来不写header,这正常吗?我忘记了什么?
#define FRAME_SIZE 960
#define SAMPLE_RATE 48000 //frequence
#define CHANNELS 1 // up to 255
#define APPLICATION OPUS_APPLICATION_AUDIO
#define MAX_FRAME_SIZE 6*960
#define MAX_PACKET_SIZE (3*1276)
#define BUFFER_LEN 1024
int main(int argc, char **argv)
{
char *inFile;
FILE *fin;
char *outFile;
FILE *fout;
opus_int16 in[FRAME_SIZE*CHANNELS];
unsigned char cbits[MAX_PACKET_SIZE];
OpusEncoder *encoder;
int err;
/*Create a new encoder state */
encoder = opus_encoder_create(SAMPLE_RATE, CHANNELS, APPLICATION, &err);
if (err<0)
{
fprintf(stderr, "failed to create an …Run Code Online (Sandbox Code Playgroud) 我正在开发一个webRTC Web应用程序,到目前为止工作得非常好.我还没想到的是如何告诉Opus编解码器(强制)使用"全频段".
将编解码器设置为510 kHz比特率很容易:
desc.sdp=desc.sdp.replace(/a=mid:audio\r\n/g,'a=mid:audio\r\nb=AS:510\r\n');
Run Code Online (Sandbox Code Playgroud)
但有没有办法告诉Opus使用哪个乐队?
我正在开发一个应用程序,用于使用谷歌云语音 API 识别语音并同时录制音频。git link
我试图播放录制的 .opus 音频文件,但出现 IOException
W/System.err: java.io.IOException: setDataSource failed.
任何的想法??谢谢!!
audio android android-mediarecorder opus google-cloud-speech
我对编写文件元数据感兴趣.opus,但到目前为止我看到的所有帖子都是针对更主流的格式,例如 .ogg 或 .mp3。我不确定 ID3 标签是否适用于 .opus 文件,并且我找不到任何说明它们是否适用的资源。我在(如何将元数据添加到 WAV 文件? )中看到了类似的内容。
如何将标题、作者等元数据写入 .opus 文件?
我认为libopus启用的ffmpeg将能够做到这一点,但从文档来看,我不清楚如何做到这一点。
使用 just 的解决方案ffmpeg是首选,但任何开源 Java 库也应该没问题。
我正在尝试将 OGG_OPUS 编码流发送到谷歌的语音到文本流服务。由于 Google 对流请求施加了时间限制,因此我必须以固定的时间间隔将音频流路由到另一个 Google Speech To Text 流会话。
据我了解,OGG流中的页面无法独立读取,因为页面中的数据是通过考虑上一页和下一页的数据来计算的。如果是这样的话,我们是否可以在某个点切断流并用剩余的数据重新创建一个全新的流?在某个点停止并在新流中发送数据是行不通的,因为初始 OGG 标头数据包在第二个流中也不可用。
我知道这个问题可以使用 PCM 数据来解决,因为它没有编码,PCM 流可以在任何点简单地分割并变成一个新的流。由于比特率太高,我无法使用 PCM 流,而且我也不喜欢使用无损质量,因为我正在传输语音数据流。
我正在尝试让我的机器人再次工作。
这是我的播放功能。
function play(connection, message) {
var server = servers[message.guild.id];
server.dispatcher = connection.play(
ytdl(server.queue[0], { filter: "audioonly" })
);
server.queue.shift();
server.dispatcher.on("end", function() {
if (server.queue[0]) {
play(connection, message);
} else {
connection.disconnect();
}
});
}
Run Code Online (Sandbox Code Playgroud)
它确实会播放。
if (!message.guild.voiceConnection)
message.member.voice.channel.join().then(function(connection) {
message.channel.send("Playing tune now, Enjoy!");
play(connection, message);
console.log("Playing tune now!");
});
Run Code Online (Sandbox Code Playgroud)
我得到我的日志,它正在播放,几秒钟后我收到一条错误消息
类型错误:无法将“null”转换为 int
类型错误:无法将“null”转换为 int
和这里的东西
discord-music-bot\node_modules\opusscript\build\opusscript_native_wasm.js:8(类型错误:无法将“null”转换为int)
在 discord.js 文档中也提到的其他脚本我无法安装,我已经尝试了所有我能想到的。
我正在使用 FFmpeg 并尝试使用内置的 FFmpeg“opus”编解码器将原始 PCM 声音编码和解码为 Opus。我的输入样本是 AV_SAMPLE_FMT_S16 格式的原始 PCM 8000 Hz 16 位单声道。由于 Opus 只需要采样格式 AV_SAMPLE_FMT_FLTP 和采样率 48000 Hz,所以我在编码之前重新采样我的样本。
我有两个ResamplerAudio类的实例,它们执行重采样音频样本的工作,并且有一个成员SwrContext,我使用第一个实例ResamplerAudio在编码之前重采样原始 PCM 输入音频,第二个实例用于重采样解码音频以获得它的格式和采样率与输入原始音频的源值相同。
ResamplerAudio 类有一个函数来初始化它的 SwrContext 成员,如下所示:
void ResamplerAudio::init(AVCodecContext *codecContext, int inSampleRate, int outSampleRate, AVSampleFormat inSampleFmt, AVSampleFormat outSampleFmt)
{
swrContext = swr_alloc();
if (!swrContext)
{
LOGE(TAG, "[init] Couldn't allocate swr context");
return;
}
av_opt_set_int(swrContext, "in_channel_layout", (int64_t) codecContext->channel_layout, 0);
av_opt_set_int(swrContext, "out_channel_layout", (int64_t) codecContext->channel_layout, 0);
av_opt_set_int(swrContext, "in_channel_count", codecContext->channels, 0);
av_opt_set_int(swrContext, "out_channel_count", codecContext->channels, 0);
av_opt_set_int(swrContext, "in_sample_rate", inSampleRate, …Run Code Online (Sandbox Code Playgroud)