我正在尝试使用LAME库在Android中实现MP3编码,遵循以下指南: Lame MP3 Encoder编译为Android http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on -Android与- JNI
但是我得到了一个java.lang.UnsatisfiedLinkError,我认为可能是因为我的包名包含一个下划线,它将其解释为句号.
看下面我的代码可能是这个问题,我该如何解决这个问题.或者是否有其他原因导致这种情况.在此先感谢您的帮助.
Record.java:
package co.uk.ing_simmons.aberdeensoundsites;
public class Record extends Activity implements OnClickListener {
static {
System.loadLibrary("mp3lame");
}
private native void initEncoder(int numChannels, int sampleRate, int bitRate, int mode, int quality);
private native void destroyEncoder();
private native int encodeFile(String sourcePath, String targetPath);
[.....]
}
Run Code Online (Sandbox Code Playgroud)
wrapper.c:
void Java_co_uk_ing_simmons_aberdeensoundsites_Record_initEncoder(JNIEnv *env,
jobject jobj, jint in_num_channels, jint in_samplerate, jint in_brate,
jint in_mode, jint in_quality) {
[....]
Run Code Online (Sandbox Code Playgroud)
完整日志cat错误:
04-17 20:58:36.009: E/AndroidRuntime(26768): FATAL EXCEPTION: main
04-17 20:58:36.009: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用命令行创建(x)秒的静音/空mp3.我认为这是一项非常简单的任务!
看起来很蹩脚的是能够像这样做一些事情,但我无法找到任何导致实现这一目标的东西.
有没有人能够做到这样的事情?
我想将两个或多个.wav文件合并为一个,然后将其转换为.mp3,我想在Swift中完成(或者至少可以选择将它包含在swift项目中).
在swift中合并两个.wav文件不是问题.这是我的例子现在我不知道如何将lame库添加到swift项目以及如何使用它(如何更改客观的蹩脚代码使用语法以在swift中使用它).
我坚持使用swift,所以我尝试了使用Objective C的Lame库.我找到了将.caf转换为.mp3的示例代码,所以我试了一下.这是我尝试过的:
- (void) toMp3
{
NSString *cafFilePath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"caf"];
NSString *mp3FileName = @"Mp3File";
mp3FileName = [mp3FileName stringByAppendingString:@".mp3"];
NSString *mp3FilePath = [[NSHomeDirectory() stringByAppendingFormat:@"/Documents/"] stringByAppendingPathComponent:mp3FileName];
NSLog(@"%@", mp3FilePath);
@try {
int read, write;
FILE *pcm = fopen([cafFilePath cStringUsingEncoding:1], "rb"); //source
fseek(pcm, 4*1024, SEEK_CUR); //skip file header
FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb"); //output
const int PCM_SIZE = 8192;
const int MP3_SIZE = 8192;
short int pcm_buffer[PCM_SIZE*2];
unsigned char mp3_buffer[MP3_SIZE];
lame_t lame = lame_init();
lame_set_in_samplerate(lame, 44100); …
Run Code Online (Sandbox Code Playgroud) LAME(http://lame.sourceforge.net/)是一个用c语言编写的库.它可以将PCM声音文件转换为MP3文件.我用它将声音文件转换为iPhone上的MP3文件.源PCM声音文件由麦克风录制.
为了将LAME包含到我的XCode项目中,我需要将LAME编译为3个静态库(.a),i386(IOS模拟器),armv6和armv7.
经过大量搜索,我成功地为i368版本(iOS模拟器)编写了一个静态库.这是命令:
./configure \
CFLAGS="-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" \
CC="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386" \
--prefix=/Volumes/Data/test/i386 \
--host="arm-apple-darwin9"
make && make install
Run Code Online (Sandbox Code Playgroud)
问题是我无法编译armv6和armv7.我试过这个命令,但报告错误.有人有解决方案吗?
./configure \
CFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" \
CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6" \
--prefix=/Volumes/Data/test/arm6 \
--host="arm-apple-darwin9"
make && make install
Run Code Online (Sandbox Code Playgroud)
错误是:
console.c:25:21: error: curses.h: No such file or directory
console.c:27:20: error: term.h: No such file or directory
console.c: In function ‘get_termcap_string’:
console.c:92: warning: implicit declaration of function ‘tgetstr’
console.c:92: warning: assignment makes pointer from integer without a cast
console.c: In function ‘get_termcap_number’:
console.c:102: warning: …
Run Code Online (Sandbox Code Playgroud) 所以我想创建简单的pcm到mp3 C++项目.我希望它使用LAME.我喜欢LAME,但它真的是biiig.所以我需要某种OpenSource,使用纯粹的代码和纯粹的蹩脚代码工作流简化器.所以说我用PCM和DEST文件给它文件.打电话给像
LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR);
矿石这样的东西在4-5行(应该存在的例子)和我有我需要的vhat应该是轻,简单,powerfool,opensource,crossplatform.
有这样的事吗?!?
我学习了如何使用lame_encode_buffer_interleaved
这个问题将wav编码为mp3 :是否有任何LAME c ++ wraper\simplifier(在Linux Mac上工作,从纯代码中获胜)?
现在我想将mp3解码回wav.我知道有,lame_decode
但我不知道如何使用它,因为它需要两个pcm缓冲区(pcm_l
和pcm_r
).我不明白如何将它们组合成一个格式良好的wav文件,因为我真的不知道它们是如何工作的.
现在有人可以提供一个简单的工作示例,使用C/C++中的lame将mp3解码为wav吗?
谢谢.
我正在尝试在C#项目中使用LAME的lame_enc.dll文件,但添加该东西似乎是不可能的.
我一直收到错误消息,指出无法添加引用,请检查是否可以访问,有效的程序集或COM组件.
我没有C++经验,但我想使用这个功能.现在我正在使用Process
.NET框架调用lame.exe并做一些事情,但我想知道是否还有其他方法.
我已经安装了sox,支持mp3和flac.
以下命令也成功将flac转换为mp3
sox /song_files/Daughter_of_Evil.flac /song_files/Daughter_of_Evil.mp3
Run Code Online (Sandbox Code Playgroud)
我的问题是"Daughter_of_Evil.mp3"不是320位mp3.我试图指定44100的采样率.但这并没有改变比特率.它保持在128kbps.
如何直接为上面的flac文件生成320位mp3文件.
我可以使用LAME将128位mp3转换为320位mp3.但是上面生成的128位mp3文件的质量已经丢失了.因此,我希望它只需一步完成.
谢谢
自从更新到v45后,Chrome似乎不再播放选择的MP3文件.这不是全面的,其他一些MP3文件仍在播放.Chrome v44没有显示任何问题并播放了所有文件.
这个问题在运行各种版本的Windows(32位和64位)的许多计算机上很常见,回滚将允许文件播放.然而,这对于客户端PC来说不是可行的解决方案,也不适合前进.
在检查文件本身时,我无法记录可播放和不可播放文件之间的任何明显差异(除了持续时间,大小和名称;持续时间和大小在两者中相当分散,因此它不像超过设定大小的文件不工作;有些人做,有些人不做.)
保存文件并使用MediaInfo进行检查会显示以下信息
General
Complete name : D:\Desktop\L03-02n.mp3
Format : MPEG Audio
File size : 3.41 MiB
Duration : 1mn 29s
Overall bit rate mode : Constant
Overall bit rate : 320 Kbps
Genre : Abstract
Writing library : LAME3.82
Audio
Format : MPEG Audio
Format version : Version 1
Format profile : Layer 3
Duration : 1mn 29s
Bit rate mode : Constant
Bit rate : 320 Kbps
Channel(s) : 1 channel
Sampling rate : 44.1 KHz …
Run Code Online (Sandbox Code Playgroud) 正如之前的一个问题所讨论的那样,我已经构建了一个原型(使用MVC Web API,NAudio和NAudio.Lame),它将实时低质量音频转换为mp3.源流是PCM:8K,16位,单声道,我正在使用html5的音频标签.
在这两种浏览器和IE11存在15-34秒的延迟(高延迟)音频从中,我告诉浏览器听说过,是我们的最终用户无法接受的.理想情况下,延迟不会超过5秒.即使在我的音频标签中使用preload ="none"属性,也会发生延迟.
仔细观察这个问题,似乎两个浏览器在收到~32K的音频数据之前不会开始播放音频.考虑到这一点,我可以通过更改Lame的MP3'比特率'设置来影响延迟.但是,如果我减少延迟(通过向浏览器发送更多数据以获得相同长度的音频),我将在稍后介绍音频丢失.
例子:
问题:
谢谢.