2017-11

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

wmaからoggへの変換

mixiでは下らん事いろいろ書いてるが、こちらはえらい久しぶりの更新。
こちらにはコンピューターネタで何か書くことあれば書こうと思ってたが、
逆を返せば、これだけ長いことなんもなかったって事なのか、、、。

年始にししょーからクラシックをもらったが、ファイル形式がwma。
で、僕が使っているジュークボックスソフトはrhythmboxというソフトなんだが
これにはwmaが対応していない。
mplayerを使って再生はできるものの、これコマンドライン起動なんでなんとも不便
んで、一応軽くwma→wav→oggへの変換のスクリプトを書いたのだが、スクリプトを起動させたフォルダ内しか変換してくれない。
まとまって聞くということもしづらく、時間もなかったので結局そのまま放置。

そろそろやるかー、と思ってスクリプトをもう一度チェック。
、、、、、単に、ししょーからもらったファイルは、フォルダのパーミッション(許可情報)に
書き込み可能のフラグがついていなかっただけだった。
まあ、そりゃもともとやいたCDからのものだからなぁ。

あっさり解決した後、ゴリゴリ変換してrhythmboxに読み込ませる。
ジャンル、演奏者、アルバム名、全部不明のまま。

あー、wavに変換したとき自動的にその情報をwavに入れてくれるわけじゃないんだ。
ってことは、何らかの形でその情報をwmaから抜きださなきゃならんわけね。

mplayerのマニュアル(コマンドman mplayer)を見てみるが、、、、
6968行
しかもオール英語
、、、、、まじっすか、、、、。
検索でauther ,title当たりで書けてみたけどもそれっぽいのなくて、
3000行目ぐらいまで読んでみたけど、結局あきらめた。

そこでふとgoogle先生に聞いてみると、
perlモジュールにそう言うのを読み込む奴あるのか、、、、、
perlで組んでるんだから、真っ先に考えるべきだろ、、、、orz

ということで、完成。ソース見りゃわかるけど、コマンドラインに影響を与える空白含めたメタ文字を潰す行が多いけど気にせずに。
Test::Pod::Coverage
Audio::WMA
をインストールする必要があります。

つーか、cpanでのインストールの仕方忘れてたし。
一応一番の得意言語のはずなのに、、、。ヤバス。


wmatoogg

#!/usr/bin/perl

use strict;
use Audio::WMA;

Audio::WMA::setConvertTagsToUTF8(undef, 1);


my @filename = `find -print`;
my @new_name ;
my ($new_filename,$old_filename);
for (my $i=0;$i<=$#filename;$i++){
  chomp $filename[$i];
  print "$i<>$filename[$i]<>$new_filename\n";
  if (-d $filename[$i]){next;}
    $old_filename = $filename[$i];
    $new_filename = $filename[$i];
    $new_filename =~ s/\.wma/\.ogg/g;
    $new_filename =~ s/ /_/g;
    $new_filename =~ s/\./__/g;
    $new_filename =~ s/__\//\.\//g;
    $new_filename =~ s/__ogg/.ogg/g;
    $new_filename =~ s/&/_and_/g;
    $new_filename =~ s/~/_/g;
    $new_filename =~ s/\?/_/g;
    $new_filename =~ s/~/_/g;
    $new_filename =~ s/[\'\"]/_/g;
    $new_filename =~ s/$\./$ENV{HOME}\/ogg\/fromwma/;
    print "$old_filename,$new_filename\n";
    `rm /tmp/tmp.wav`;
    my $wma = Audio::WMA->new($old_filename);
    my $tags = $wma->tags();
    `mplayer -ao pcm:file=/tmp/tmp.wav "$old_filename"`;
    `oggenc -o "$new_filename"  --artist "$tags->{ALBUMARTIST}" --album "$tags->{ALBUMTITLE}" --title "$tags->{TITLE}" --date "$tags->{YEAR}" --tracknum "$tags->{NUMBER}" --genre "$tags->{GENRE}" /tmp/tmp.wav`;

  } forの条件ミスるなんて超初歩的なミスを、、、。
ALBUMARTISTのところはともかく。

バンド計算+MO計算をやるとなると、パッケージソフトか、自分で作るかだし、自分で作るとなると計算量からfortoranやC++何かの比較的機械後に近い言語になるだろうけど、きっちりプログラム組んでいかないと、忘れる、、、。orz
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://parathion.blog76.fc2.com/tb.php/28-0c15e94b
この記事にトラックバックする(FC2ブログユーザー)

«  | HOME |  »

プロフィール

パラジョン

Author:パラジョン
FC2ブログへようこそ!

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。