渡辺一寛です。
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
([メールアドレス保護])