渡辺一寛です。

At Sat, 03 Nov 2007 22:56:19 +0900,
Dobashi.M wrote:
> At Fri, 02 Nov 2007 23:02:38 +0900,
> S.Kimura (LEE) wrote:
> > オーディオ・アンプの出力をサウンドカードの入力(line in)に
> > 接続して、カセット・テープなどのアナログ音源をデジタル・フ
> > ァイルとして録音したいのですが
> 
> 6.2-RELEASE-p6で、xwaveを使用しています。
> 
> 入力の切替(レヴェルの調整)には xmixを使用していますが、mixerコマンドも
> 使えます。
> % mixer
> ...
> Recording source: line
> 
> xwaveは、赤丸の録音ボタンで設定画面になりますので、サンプリング周波数
> などを確認して、OKボタンで録音が開始されますので、停止後にファイル
> (.wavなど)へ保存する事になります。(時々フリーズします;)
> (mp3へは bladeencなどで変換する事になります)

他にコマンドラインで動作する録音ソフトウェアとして、
wavplay (ports/audio/wavplay) の wavrec コマンド、
SoX (ports/audio/sox) の rec コマンドなどがあります。

例えば CD ドライブのアナログ出力から録音する場合、次のようにします。

% mixer =rec cd                                 # 録音ソースは CD
% mixer cd 50                                   # 録音レベルを調節 (注)
% wavrec -S -s 44100 -b 16 -t 300 test.wav      # CD クオリティで 5 分間録音

ただし録音レベルの調整に使用するミキサデバイスはサウンドカードによって
異なり、対象デバイス (例: line, cd) をじかに調節するしかないものや、そ
れ専用のミキサデバイス (igain, rec) があるもの、あるいはそのどちらも使
用できるものなどがあります。


> audacityはインストールして、時々遊んでいます。使い方によっては、同じか
> それ以上の利用が出来るかと思います。

私も Audacity (ports/audio/audacity) をちょっと使ってみました。デフォ
ルトの録音フォーマットが 1 チャネル (モノラル) になっているので、そこ
を真っ先に変更する必要がありましたが、録音/編集ソフトウェアとしてなか
なかよいですね。

ただ、手元の PC は SiS 7012 (snd_ich) + YAMAHA YMF753 が載っているので
すが、"Input Volume" スライダを動かしても録音レベルが変化しません。

これは Audacity が録音レベルの設定にミキサの "igain" を操作しているた
めです。 FreeBSD の場合、AC97 コーデックに対する "igain" は別の目的に
使用されているため (マイク入力の +20dB ブースト)、これを操作しても録音
レベルは変化しません。

かわりにミキサの "rec" を操作すればよいのですが、この部分はソースで決
め打ちされているので、変更するにはソースを書き換える必要があります。

# まぁ他のミキサソフトウェアで操作してもいいんですが。

書き換えといっても 2 箇所なので大したことありませんが、いちおうパッチ
を付けておきます。以下の内容のファイルを、既存の
ports/audio/audacity/files/patch-portmixer-px_unix_oss.c
と差し替えればよいです。

--- ./lib-src/portmixer/px_unix_oss/px_unix_oss.c.orig  Sun Nov 27 11:33:39 2005
+++ ./lib-src/portmixer/px_unix_oss/px_unix_oss.c       Sat Nov  3 21:59:57 2007
@@ -37,6 +37,8 @@
 
 #ifdef __linux__
 #include <linux/soundcard.h>
+#elif defined(__FreeBSD__)
+#include <sys/soundcard.h>
 #else
 #include <machine/soundcard.h> /* JH20010905 */
 #endif
@@ -327,7 +329,7 @@
    if (i < 0)
       return 0.0;
 
-   return GetVolume(info->fd, SOUND_MIXER_IGAIN);
+   return GetVolume(info->fd, SOUND_MIXER_RECLEV);
 }
 
 void Px_SetInputVolume( PxMixer *mixer, PxVolume volume )
@@ -342,7 +344,7 @@
 
    vol = (int)((volume * 100.0) + 0.5);
    vol = (vol | (vol<<8));
-   ioctl(info->fd, MIXER_WRITE(SOUND_MIXER_IGAIN), &vol);
+   ioctl(info->fd, MIXER_WRITE(SOUND_MIXER_RECLEV), &vol);
 }
 
 /*

---
Watanabe Kazuhiro 
([&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x4FDD;&#x8B77;])

メールによる返信