【问题标题】:lame mp3 encoder returns bad mp3 file蹩脚的 mp3 编码器返回错误的 mp3 文件
【发布时间】:2013-12-02 23:28:41
【问题描述】:

我尝试在 android 中使用 lame mp3 编码器将 wav 文件转换为 mp3,生成了 libmp3lame.so,应用程序将 test.wav 成功转换为 test.mp3,但问题是 mp3 文件类似于 THIS,我的wav文件是说话的声音,转换的时候什么都听不懂,有什么问题?是不是因为mp3选项?

这是我的主要代码:

public class Main extends Activity {

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);

public static final int NUM_CHANNELS = 1;
public static final int SAMPLE_RATE = 16000;
public static final int BITRATE = 128;
public static final int MODE = 1;
public static final int QUALITY = 2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    initEncoder(NUM_CHANNELS, SAMPLE_RATE, BITRATE, MODE, QUALITY);

    encodeFile(Environment.getExternalStorageDirectory()
            .getPath() + "/test.wav", Environment
            .getExternalStorageDirectory().getPath() + "/test.mp3")
}

@Override
public void onDestroy() {
    destroyEncoder();
    super.onDestroy();
}

}

【问题讨论】:

  • 嗨,您找到解决该问题的方法了吗?
  • LAME 应该是一个非常稳定的编码器,几乎没有 LAME 的问题。选项不应弄乱最终结果。你可能做错了什么。

标签: android mp3 lame


【解决方案1】:

我们使用 windows 中的 php 和 MediaHuman 的 ffmpeg.exe 进行转换, 这也会备份原件。

<?php

ini_set('display_errors', 1);
const SAMPLERATE = 44100;
const BITRATE = 128;
const CHANNELS = 2;
$dir = 'newmusic';

include('ID3TagsReader.php');

function needsConversion($file) {
$reader = new ID3TagsReader();
$headers = $reader->getMP3BitRateSampleRate($file);

if($headers['sampleRate'] != SAMPLERATE) return true;
if($headers['bitRate'] != BITRATE) return true;

return false;
}

function backupFile($file) {
$source = $file;
$dest = "C:\\backup\\music\\" . $file . " - "  . date('YmdHis') . ".mp3";

echo "Copying $source to $dest\n";
copy($source, $dest);
}

function convertFile($file) {
    echo "Converting file " . $file . "\n";

    $ffmpeg = escapeshellarg("C:\\Program Files\\MediaHuman\\Audio 
Converter\\ffmpeg.exe");
    $source = escapeshellarg($file);
    $samplerate = escapeshellarg(SAMPLERATE);
    $bitrate = escapeshellarg(BITRATE * 1000);
    $channels = escapeshellarg(CHANNELS);

    echo system("$ffmpeg -i $source -ar $samplerate -ac $channels -ab $bitrate -y 
temp.mp3 2>&1");

    rename('temp.mp3', $file);
}

chdir($dir);
foreach(glob('*.mp3') as $file) {
if(needsConversion($file)) {
    backupFile($file);
    convertFile($file);
}
}

header('Location: some place to go');
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2019-10-13
    • 1970-01-01
    • 2012-06-24
    • 2013-02-28
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多