Help us understand the problem. What is going on with this article?

LAMEによるwav→mp3変換

More than 3 years have passed since last update.

フリーの音源変換ソフトが色々と鬱陶しい

ので、エンコーダを集めた、俺流:音源変換ターミナルアプリを試作しようと考えました。

とりあえずLAMEによるwav→mp3変換

最初からターミナルっぽいものなんて作れないので、とりあえずLAME使ってwav→mp3変換を行います。
もちろんコンソールアプリで。
手順は以下の通り。

  1. 下記URLからLAMEのバイナリファイルを入手
    http://www.rarewares.org/mp3-lame-dshow-acm.php

  2. バイナリファイルを下記ディレクトリにコピー
    ・C:\Windows\System32
    ・C:\Windows
    (2つとも必要なのかはよくわかっていない)

  3. 下記コード(Spiral.cpp)をビルド&実行

Spiral.cpp
//---------------------------------
// Spiral.cpp
// WAV→MP3変換を行うアプリ
// 
// 作成日:2016/10/15
// 更新日:2016/10/20
// 作成者:西森無理
//---------------------------------

#include <string>
#include <iostream>
#include <stdlib.h>
#include "stdafx.h"

using namespace std;

// 拡張子の場所を探す関数
//
// 入力:fullPath=ファイル名(パス付)
// 出力:ファイル名のみ
string extractFileName(string &fullPath)
{
    string::size_type slPos;
    if ((slPos = fullPath.find_last_of("\\")) == string::npos)
    {
        slPos = 0;
    }

    string::size_type idPos;
    if ((idPos = fullPath.find_last_of(".")) == string::npos)
    {
        cerr << "ファイルに拡張子がついていません。" << endl;
        return { EXIT_FAILURE };
    }

    return fullPath.substr(slPos + 1, idPos - slPos - 1);
}

// 拡張子の場所を探す関数
//
// 入力:fullPath=ファイル名(パス付)
// 出力:拡張子のみ
string extractIdentifier(string &fullPath) {
    string::size_type idPos;
    if ((idPos = fullPath.find_last_of(".")) == string::npos) {
        cerr << "ファイルに拡張子がついていません。" << endl;
        return{ EXIT_FAILURE };
    }

    return fullPath.substr(idPos + 1, fullPath.length() - idPos + 1);
}

// LAMEエンコーダを用いてwav→mp3変換を行う関数
//
// 入力:argc=コマンドライン引数の数
// 出力:argv[1]=入力ファイル名
//     :argv[2]=ビットレート
int main(int argc, char** argv)
{
    if (argc != 3)
    {
        cerr << "コマンドライン引数が間違っています。";
        cerr << "使用方法:Spiral.exe 変換ファイル名 ビットレート\n";
        return{ EXIT_FAILURE };
    }

    string codec = "lame";
    string inFileName = argv[1];
    string outFileName;
    string outFileDir = "C:\\Users\\Yuuki\\Desktop";
    string bitrate = argv[2];
    string quality = "0";
    string cmdLine;

    if (extractIdentifier(inFileName) == "wav") {
        outFileName = outFileDir + "\\" + extractFileName(inFileName) + ".mp3";
        cmdLine = codec + " " + " -b " + bitrate + " -q " + quality + " --silent " + inFileName + " " + outFileName;
    } else {
        cout << "wav → mp3以外対応していません。" << endl;
    }
    system((const char*)cmdLine.c_str());
    return EXIT_SUCCESS;
}

また、下記バッチファイルを作成。

Spiral.bat
@echo off
echo --------------
echo Spiral Ver0.1
echo --------------

set /P bitrate="bitrate : "

for %%a in (%*) do (
  echo %%a
  Spiral.exe %%a %bitrate%
)

これでSpiral.batにドラッグアンドドロップでwavファイルを放り込んでやれば、mp3ファイルが
作成されます。

※10/20追記
複数エンコーダを使用しようと思いましたが、自分のニーズを考えた結果これで終了とします。
バッチファイルの作成方法も少しわかったしよかったよかった。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away