轉換m4a、aac為mp3的技巧

轉換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#

Alvas.AudioAbout LAME

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?

录制caf 转 mp3

iPhone通过(lame for iPhone armV7)将音频Caf格式转换成Mp3

 

Dotblogs Tags: