轉換m4a、aac為mp3的技巧
其實我一直很好奇為什麼WeChat、Whatsapp或LINE他們可支援iOS、Android與WP可以互相
傳遞語音檔案,因為三個平台本身預設支援的多媒體播放均不相同,但實際去看了各平台收到的檔案,
‧iOS收到的是m4a;
‧Android收到的是:arm或aac;
‧WP收到的是:wav;
從上述舉例的檔案格式裡,可以發現其實這些通訊Application的Server端或Client端應該有人做了轉換的動作。
這一點讓我覺得非常特別,因此,找到了一個開發人員最常用到轉換的Project:Lame Project,以下舉例說明。
〉Lame Project & Convert M4A to MP3 on Windows (without paying):
由於Lame屬於使用bat或command line的範例比較多一些,因此,在使用Lame之前建議先看一下相對應的指令,
有助於了解怎麼操作Lame元件來進行音檔的轉換。
往下將直接引用<Convert M4A to MP3 on Windows (without paying)>中一個重要的類別,來說明如何轉換m4a與aac
為需要的mp3檔案。
(a) 先至<AlexeyMK / M4A-to-MP3--.net->下載專案檔;
由於下載下來的專案檔中,不包括AssemblyInfo.cs檔案,所以建議:
a-1. 建立一個新的專案;
a-2. 將M4A2MP3.cs複製至新專案中;
a-3. 注意utils資料夾中的檔案(faad.exe、lame.css與lame.exe),必須複製至執行程式(*.exe)相同的目錄下;
a-4. 如果是新建專案,記得加入參考:Microsoft.VisualBasic;
(b) 了解M4A2MP3.cs:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using Microsoft.VisualBasic;
6: using System.IO;
7:
8: namespace fjEnterprises
9: {
10: public static class M4A2MP3
11: {
12: /// <summary>
13: /// converts an M4A file to an MP3 file. Note:
14: /// make sure that lame.exe and faad.exe are in the same directory
15: /// as this dll.
16: /// Inspired by (and using code from)
17: /// http://yakkowarner.blogspot.com/2008/06/my-m4a2mp3-script.html
18: /// </summary>
19: /// <param name="fromPath">The m4a file (use full path)</param>
20: /// <param name="toPath">the mp3 file (use full path)</param>
21: public static void Convert(string fromPath, string toPath)
22: {
23: int lastIndex = fromPath.Contains("\\") ? fromPath.LastIndexOf('\\') : 0;
24: string tempFileName = Environment.CurrentDirectory + "\\temp\\" + fromPath.Substring(lastIndex);
25:
26: //識別目前應用程式執行目錄下是否有將轉換用的暫存檔存在
27: if (File.Exists(tempFileName))
28: {
29: File.Delete(tempFileName);
30: }
31: if (!Directory.GetParent(tempFileName).Exists)
32: {
33: Directory.GetParent(tempFileName).Create();
34: }
35:
36: //呼叫faad.exe將指定的來源檔案,轉至暫存路徑,呼叫過程中不顯示faad.exe的視窗
37: Interaction.Shell(String.Format("faad.exe -o {0} {1}",
38: InQuotes(tempFileName),
39: InQuotes(fromPath)),
40: AppWinStyle.Hide, true, -1);
41:
42: //呼叫lame.exe將指定的暫存檔案,配合lame的指令轉成mp3檔案,呼叫過程中不顯示lame.exe的視窗
43: Interaction.Shell(String.Format("lame.exe --preset standard {0} {1}",
44: InQuotes(tempFileName),
45: InQuotes(toPath)),
46: AppWinStyle.Hide, true, -1);
47:
48: File.Delete(tempFileName);
49: }
50:
51: private static string InQuotes(string withoutQuotes)
52: {
53: return "\"" + withoutQuotes + "\"";
54: }
55: }
56: }
上述程式碼,主要指將要轉換的來源檔案與要轉出目的檔案放入該類別的方法中,接著透過
faad.exe將來源檔案轉換至暫存的檔案路徑後,接著將產生的暫存檔案配合lame.exe真正轉回mp3的檔案格式。
[補充]
‧Interaction.Shell():
來自Microsoft.VisualBasic中的類別。用於呼叫可執行的程式(*.exe),並且在執行時可以回傳一個整數。
該整數代表此程執處理的ID。
‧AppWinStyle:
來自Microsoft.VisualBasic中的類別。用於搭配Interaction.Shell()使用,指定當Shell()呼叫可執行的程式時,
該被叫用的程式使用的視窗樣式,例如:隱藏視窗、最大化、最小化、一般大小且關注、一般小但不關注等。
[範例程式]
======
以上是整理有關如何轉換m4a、aac的檔案為mp3的方式,其實在處理音訊的觀念我也不是非常清楚,
除了在<How to load ByteArray to Sound Class (1)>與<How to load ByteArray to Sound Class (2)>
這二篇過程有比較詳細碰過之外,其時還有很多需要補充的地方,如果有撰寫錯誤的部分,
請大家多多包涵也請給予指導,謝謝。
References:
‧Convert .wav to .mp3 using Lame.exe in C#
‧c#利用lame.exe实现mp3编码 & lame.exe 参数说明
‧Convert M4A to MP3 on Windows (without paying) & AlexeyMK / M4A-to-MP3--.net-
‧How to Use LAME in Visual Basic
‧iPhone通过(lame for iPhone armV7)将音频Caf格式转换成Mp3
‧How to Convert TTA CUE file to MP3, FLAC, WAV, AIFF, and WMA?
‧iPhone通过(lame for iPhone armV7)将音频Caf格式转换成Mp3