65.9K
CodeProject 正在变化。 阅读更多。
Home

轻松 MP3 录制(也可使用 iTunes)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (4投票s)

2010 年 8 月 27 日

CPOL

4分钟阅读

viewsIcon

42836

downloadIcon

3737

类库和工作程序,可轻松录制 MP3、wav 和原始 pcm 文件。还可以与 iTunes 集成。

引言

一年前,我和我姐姐想把我们购买的所有 iTunes 内容备份成 MP3 格式。于是我编写了这个程序,并写了一篇文章介绍它。但是,这个程序本身很难使用,而且代码很笨拙,因为我当时并没有花心思清理代码。不过,最近我需要制作一个易于使用的版本。于是,在改进应用程序设计的同时,我也顺便改进了代码。结果,我创建了一个包含三个有用类(以及一些内部使用的辅助类)的库。这两个类是 RecorderiTunes Recorder ExtensionRecorder 是基础录音类,它使用 Istrib 库(可从此处获取)来录制内容。它可以轻松地集成到任何希望录制内容的应用程序中。iTunes Recorder Extension 类顾名思义,更加具体。它提供了一个易于使用的对象,将 iTunes 及其库与 Recorder 类和 Istrib 库连接起来。

Using the Code

使用我的代码非常简单。你只需创建一个 Recorder 对象或 iTunesRecorderExtension 对象。然后设置一些对象并调用其中一个 Start 函数。

在本文中,我将重点介绍 iTunesRecorderExtension 对象,因为我的应用程序就是使用的这个对象,尽管 Recorder 类也同样易于使用。

要创建 iTunesRecorderExtension 对象,只需执行以下操作:

iTunesRecorderExtension TheRecorder = new iTunesRecorderExtension(true, "A Folder Path");

有两个参数:

  • DoUseLog - bool
  • ALogFolderPath - string

如果你想使用我的 Log 类,则 DoUseLog 应设置为 trueLog 对象是一种以日志格式读取和写入文本文件的简单方法。当你让日志写入一条记录时,它会自动添加长日期和时间,并将记录分隔开,以便于阅读。如果你想使用日志,还必须为其提供一个日志文件夹路径。这是一个 string,包含你希望日志存储的文件夹路径。对于 iTunesRecorderExtension,有两个日志:Recorder 日志(来自底层的 Recorder 对象)和 Application 日志(来自 iTunesRecorderExtension,用于存储信息)。Recorder 日志记录每次录音开始的时间以及录制的曲目。此外,Recorder 对象遇到的任何错误都会被记录下来。Application 日志记录整体录音的开始和结束时间,以及 Recorder 对象返回的任何错误和自身的错误。

要使用该类,你必须执行三项操作:

  1. 选择 SoundCaptureDevice (声音捕获设备)
  2. 提供一个文件夹名称来存储录制的曲目
  3. 指示它开始录制

要选择一个 sound capture device,你应该在屏幕上使用组合框,因为程序不支持区分哪个设备正在播放声音,哪些只是其他未使用的声卡等。

以下代码将可用的设备添加到组合框,可以在应用程序启动时的加载函数中调用:

List<object> Objects = new List<object>(); 
for (int i = 0; i < TheRecorder.AvailableDevices.Count; i++) 
{ 
	Objects.Add(TheRecorder.AvailableDevices[i]);
} 
SoundCaptureDevicesCmb.Items.AddRange(Objects.ToArray());

以下代码将用户选择的设备传输到 iTunesRecorderExtension 对象:

TheRecorder.Device = (Istrib.Sound.SoundCaptureDevice)
	(SoundCaptureDevicesCmb.Items[SoundCaptureDevicesCmb.SelectedIndex]);

要告诉 iTunesRecorderExtension 对象将录制的曲目保存在哪里,你只需要一行代码:

TheRecorder.OutputFolder = OutputFolderBox.Text;

文件名会自动生成。文件也会按子文件夹排序。顶层是艺术家,下一个子文件夹是专辑,然后是曲目文件。(**注意**:如果艺术家和/或专辑为空/null,则将它们设置为文本'Blank'!)

最后,你必须告诉 iTunesRecorderExtension 开始录制。这可以通过两种方式完成:一种是立即录制,另一种是等到指定的时间开始录制,并在另一个指定的时间停止录制。我开发了第二种方法,因为这样我就可以在不熬夜的情况下进行隔夜录制!

第一种方式如下:

TheRecorder.StartNow((Istrib.Sound.SoundCaptureDevice)
	(SoundCaptureDevicesCmb.Items[SoundCaptureDevicesCmb.SelectedIndex]));

(**注意**:即使你已经设置了声音捕获设备,也必须再次传递它,以确保已设置。)

第二种方式同样简单,只有两个额外的参数:StartTimeEndTimeStartTime 是录制开始的时间(精确到小时和分钟,而非天或秒)。EndTime 是录制结束的标称时间。录制会在这个时间停止,但是,录制会一直继续,直到当前播放的曲目播放完毕(即达到 EndTime)。这确保你不会只录制到一半的曲目,但是,如果你正在录制长篇有声读物,你可能需要在设置 EndTime 之前计算出录制结束的大致时间!

开始和结束的代码如下所示:

TheRecorder.StartWaiting(dateTimePicker1.Value, dateTimePicker2.Value, 
			(Istrib.Sound.SoundCaptureDevice)
			(SoundCaptureDevicesCmb.Items
				[SoundCaptureDevicesCmb.SelectedIndex])); 

TheRecorder.StopWaiting();

就是这么简单! ;D

我包含的其他一些属性是 RecordingWaitingRecording 返回应用程序是否仍在录制,即使 EndTime 已达到/过去。Waiting 返回应用程序是否正在等待 StartTimeEndTime 被达到(不区分)。

轻松 MP3 录制 (也使用 iTunes) - CodeProject - 代码之家
© . All rights reserved.