- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Ubuntu 上使用 libsox 库开发了 C 代码来改变声音文件(3 到 10 秒 ogg 文件)的速度(增加/减少)using following sample code .使用 tempo(value > 1) 我得到输出文件(带有截断的语音)但是对于 tempo(值 < 1)我得到正确的输出文件(带有所有语音样本)。
#include "sox.h"
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
/*
* Reads input file, applies effects, stores in output file.
*executable file:example, input fie:audio.ogg ,output file:tempo.ogg
E.g. ./example audio.ogg tempo.ogg
*/
int main(int argc, char * argv[])
{
static sox_format_t * in, * out; /* input and output files */
sox_effects_chain_t * chain;
sox_effect_t * e;
char * args[10];
assert(argc == 3);
/* All libSoX applications must start by initialising the SoX library */
assert(sox_init() == SOX_SUCCESS);
/* Open the input file (with default parameters) */
assert(in = sox_open_read(argv[1], NULL, NULL, NULL));
/* Open the output file; we must specify the output signal characteristics.
* Since we are using only simple effects, they are the same as the input
* file characteristics */
assert(out = sox_open_write(argv[2], &in->signal, NULL, NULL, NULL, NULL));
/* Create an effects chain; some effects need to know about the input
* or output file encoding so we provide that information here */
chain = sox_create_effects_chain(&in->encoding, &out->encoding);
/* The first effect in the effect chain must be something that can source
* samples; in this case, we use the built-in handler that inputs
* data from an audio file */
e = sox_create_effect(sox_find_effect("input"));
args[0] = (char *)in, assert(sox_effect_options(e, 1, args) == SOX_SUCCESS);
/* This becomes the first `effect' in the chain */
assert(sox_add_effect(chain, e, &in->signal, &in->signal) == SOX_SUCCESS);
free(e);
/* Create the `tempo' effect, and initialise it with the desired parameters: */
e = sox_create_effect(sox_find_effect("tempo"));
args[0] = "1.5", assert(sox_effect_options(e, 1, args) == SOX_SUCCESS);
/* Add the effect to the end of the effects processing chain: */
assert(sox_add_effect(chain, e, &in->signal, &in->signal) == SOX_SUCCESS);
free(e);
/* The last effect in the effect chain must be something that only consumes
* samples; in this case, we use the built-in handler that outputs
* data to an audio file */
e = sox_create_effect(sox_find_effect("output"));
args[0] = (char *)out, assert(sox_effect_options(e, 1, args) == SOX_SUCCESS);
assert(sox_add_effect(chain, e, &in->signal, &in->signal) == SOX_SUCCESS);
free(e);
/* Flow samples through the effects processing chain until EOF is reached */
sox_flow_effects(chain, NULL, NULL);
/* All done; tidy up: */
sox_delete_effects_chain(chain);
sox_close(out);
sox_close(in);
sox_quit();
return 0;
}
在这里我使用了 tempo speed=1.5 并且我尝试了所有大于 1 的不同值。谁能告诉我我必须做哪些改变才能获得适当增加的节奏声音文件?
最佳答案
这看起来类似于 src/example0.c。我认为此示例中存在一个错误,它会将 &in->signal 作为两个参数传递给每次调用 sox_add_effect()。
我相信这会用效果的输出配置覆盖 in 配置。
查看 src/example6.c 以及它如何使用变量 interim_signal 作为输入和 &out->signal 作为输出。
大致:
sox_signalinfo_t interm_signal; /* @ intermediate points in the chain. */
...
interm_signal = in->signal; /* NB: deep copy */
...
/* Create the `vol' effect, and initialise it with the desired parameters: */
e = sox_create_effect(sox_find_effect("vol"));
args[0] = "3dB", assert(sox_effect_options(e, 1, args) == SOX_SUCCESS);
/* Add the effect to the end of the effects processing chain: */
assert(sox_add_effect(chain, e, &interm_signal, &out->signal) == SOX_SUCCESS);
free(e);
关于c - 如何在 C 中使用 libsox 更改声音文件的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53567179/
我开发了一个简单的应用程序,它使用 libsox(使用 this example)更改音频文件的音高。这是我的代码。它使用 2 个输入参数 - 输入文件路径和输出文件路径: #include #in
我需要打开默认的音频捕获设备并开始录音。 libsox 好像是a nice cross-platform solution .使用二进制前端,我可以 rec test.wav 并激活默认麦克风。 但是
我正在使用多线程应用程序中的音频处理库 libSox。多个线程可以同时调用 libsox 函数。我想知道 libsox 是否是线程安全的,因为我遇到了这个随机崩溃。 最佳答案 不,它不是完全线程安全的
我正在尝试以编程方式对 libSox 应用一些效果,目前我无法理解我是否做对了。例如,我需要应用速度和增益效果,并在缓冲区中读取生成的音频以进行进一步处理。文档真的很稀缺,谷歌搜索也没有用。这是我的代
我想将多 channel (2,8 或 16)wav 文件拆分为其 channel 并将每个 channel 保存在另一个 wav 文件中。 到目前为止,我已经完成了在我的 c++ objective
编辑:我想使用 libsox 以编程方式转换 wav 文件的采样率、音频格式、 channel 等。 在 libsox 手册页中,有很多我可以使用的函数,但我完全不知道该怎么做。任何人都可以给我一些关
我正在尝试使用 libSoX API 以编程方式转换内存缓冲区中的音频。例如,它可以很好地改变采样率,但在 PCM 和 FLAC 之间转换时我遇到了一些麻烦。 QByteArray inData =
我想为 iPhone 设备构建 libsox,但我没有这样做。我只是想知道是否有可能为 iphone 构建这个库.... 最佳答案 einsteinx 已经从我的博客发布了;)但这里又出现了两个链接
我正在尝试使用 Sox 库 C 程序 ( http://sox.sourceforge.net/ ) 将 16KHZ 16 位签名 PCM 编码波形文件转换为 8KHz 8 位 mu 编码波形文件。从
我有一个需要播放 mp3 文件的应用程序。我正在寻找的是 libsox(或任何其他音频库)的某种包装函数。我一直在网上寻找,但没有找到任何可以快速实现的选项。我正在寻找类似的东西; bla=open_
我在 Ubuntu 上使用 libsox 库开发了 C 代码来改变声音文件(3 到 10 秒 ogg 文件)的速度(增加/减少)using following sample code .使用 temp
我正在尝试在 Windows 上使用 LibSoX 混合两个 wav 文件。我可以通过使用以下命令从命令行使用 sox 来完成此操作: sox -m f1.wav f2.wav out.wav 但是我
我的服务器抛出了这个错误 Sox::Error (sox FAIL formats: no handler for file extension `mp3' ) 此人 ( https://superu
我是 libsox 编程的新手,我想从名为“a.wav”的立体声音频中减少一个 channel ,然后使用以下代码生成一个单声道音频“b.wav”: sox_format_t * in, * out;
我正在寻找从已经使用 javax.sound 完成其工作的 Java 应用程序打开/操作 CAF(核心音频格式)文件。有谁知道 libsox 或 libsndfile 的 javax.sound 包装
我是一名优秀的程序员,十分优秀!