перловый скрипт заполнения тэгов "исполнитель" и "название произведения" wav файла,
в виде вложения к сообщению зааплоадить не получилось, поэтому выкладываю текст прямо в сообщении,
сохраните его под любым именем, например setwavinfo.pl;
способ запуска:
perl setwavinfo.pl -i "входной файл.wav" -o "выходной файл.wav" -a "имя исполнителя" -n "название произведения"
скрипт создает новый файл не изменяя исходного
в wav файле теги "исполнитель" и "название произведения" есть одни из многих подтэгов чанка INFO, который в свою очередь является частью чанка LIST, о том, какие еще тэги там есть можно узнать в википедии http://ru.wikipedia.org/wiki/RIFF,
к чему я это пишу, скрипт полностью заменяет чанк LIST, и если у вас в этом чанке уже была какая-то информация, то она будет потеряна.
скрипт может поглюкивать, я не проверял его работу на всех возможных вариантах wav файлов, в любом случае исходный файл он не испортит
use Getopt::Std;
use bytes;
my ($in_wav_name,$out_wav_name,$tag_artist,$tag_name, $in_riff_size,$chunk_type,$chunk_size);
my ($list_size,$info_size,$iart_size,$inam_size,$got, $buf,$list_buf,$info_buf,$iart_buf,$inam_buf);
getopt("ioan:");
$in_wav_file = $opt_i;$out_wav_file = $opt_o;$tag_artist = $opt_a;$tag_name = $opt_n;
open(IN_RIFF,"< $in_wav_file") || die "can't open $in_wav_file: $!\n";binmode(IN_RIFF);
#read RIFF header
$got = read(IN_RIFF,$buf,8 );
defined $got || die "file read error $in_wav_file: $!\n";
$got == 8 || die "file read error $in_wav_file: riff header, expected 8 bytes, got $got\n";
($chunk_type,$in_riff_size) = unpack( 'A4V', $buf );
$chunk_type == 'RIFF' || die "file $in_wav_file is not a RIFF\n";
#next chunk must be WAVE
$got = read(IN_RIFF,$buf,4);
defined $got || die "file read error $in_wav_file: $!\n";
$got == 4 || die "file read error $in_wav_file: wave chunk, expected 4 bytes, got $got\n";
$chunk_type = unpack( 'A4', $buf );
$chunk_type == 'WAVE' || die "file $in_wav_name is not WAVE\n";
#ok
open(OUT_RIFF,"> $out_wav_file") || die "can't open $out_wav_file: $!\n";binmode(OUT_RIFF);
print(OUT_RIFF 'RIFF'.pack('V',$in_riff_size).'WAVE');
# prepare new LIST chunk
$iart_size = length ($tag_artist) + 1;
$inam_size = length ($tag_name) + 1;
$info_buf = 'INFOIART'.pack('V',$iart_size).pack('Z'.$iart_siz e,$tag_artist).(($iart_size%2)==1&&pack('x')).'INA M'.pack('V',$inam_size).pack('Z'.$inam_size,$tag_n ame).(($inam_size%2)==1&&pack('x')).'ISFT'.pack('V ',14).pack('Z14','setwavinfo.pl');
$info_size = length $info_buf;
$list_buf = 'LIST'.pack('V',$info_size).$info_buf;
$list_size = $info_size + 8;
#copy all chunks except LIST
while ( 1 ) {
$got = read(IN_RIFF,$buf,8 );
( defined $got ) || die "file read error $in_wav_file: $!";
if ( $got == 0 ) {
$out_riff_size = $in_riff_size + $list_size;
last;
} else {
( $got == 8 ) || die "file read error $in_wav_file: next chunk, expected 8 bytes, got $got\n";
print OUT_RIFF $buf || die "file write error $out_wav_file: $!\n";
($chunk_type,$chunk_size) = unpack( 'A4V', $buf );
$chunk_size = $chunk_size+($chunk_size%2);
if ( $chunk_type eq 'LIST' ) {
seek(OUT_RIFF,-8,1);
seek(IN_RIFF,$chunk_size,1);
$out_riff_size = $in_riff_size + $list_size - $chunk_size - 8;
last;
}
$got = read(IN_RIFF,$buf,$chunk_size);
( $got == $chunk_size ) || die "file read error $in_wav_file: next chunk, expected $chunk_size bytes, got $got\n";
print OUT_RIFF $buf || die "file write error $out_wav_file: $!\n";
}
}
print OUT_RIFF $list_buf || die "file write error $out_wav_file: $!\n";
#copy more chunks if any
while ( 1 ) {
$got = read(IN_RIFF,$buf,8 );
( defined $got ) || die "file read error $in_wav_file: $!\n";
if ( $got == 0 ) {
last;
} else {
( $got == 8 ) || die "file read error $in_wav_file: next chunk, expected 8 bytes, got $got\n";
print OUT_RIFF $buf || die "file write error $out_wav_file: $!\n";
($chunk_type,$chunk_size) = unpack( 'A4V', $buf );
$chunk_size = $chunk_size+($chunk_size%2);
$got = read(IN_RIFF,$buf,$chunk_size);
( $got == $chunk_size ) || die "file read error $in_wav_file: next chunk, expected $chunk_size bytes, got $got\n";
print OUT_RIFF $buf || die "file write error $out_wav_file: $!\n";
}
}
seek(OUT_RIFF,4,0);
print OUT_RIFF pack('V', $out_riff_size ) || die "file write error $out_wav_file: $!\n";
close(OUT_RIFF);
close(IN_RIFF);
-
- Сообщений
- 34
- Репутация
- 240 (0)
04.03.2010 21:18
-
Пользователи, сказавшие Спасибо boneear за полезный пост
gav17 (04.03.2010)
-
- Сообщений
- 245
- Репутация
- 170 (0)
05.03.2010 04:39таки не появилось в линуксе приличной ГУИ проги для всех этих дел? жаль...
ATH-ES7 на запчасти
DT860 на запчасти (обе версии)
-
- Сообщений
- 34
- Репутация
- 240 (0)
05.03.2010 09:16да, если кто не в курсе, перл есть и в винде, пакет называется activeperl,
а в максимальной семерке/висте так вообще есть юниксовая подсистема с перлом, шелом и т.д.
-
- Адрес
- Московская обл.
- Сообщений
- 2,432
- Репутация
- 6701 (0)
05.03.2010 09:22да, если кто не в курсе, перл есть и в винде, пакет называется activeperl,
а в максимальной семерке/висте так вообще есть юниксовая подсистема с перлом, шелом и т.д.Плеер-
Наушники-
-
- Сообщений
- 88
- Репутация
- 70 (0)
05.03.2010 09:27Меня очень интересует, но при этом я не хочу брать вставные наушники, "ухи" у меня чересчур чувствительные, да и на ходу я их не буду использовать, поэтому вопрос- кто-нибудь пробовал с М10 накладные наушники- открытого, полуоткрытого или закрытого типа- с этим я пока не определился. Будет очень интересно почитать, чтобы сузить кол-во вариантов.
-
- Сообщений
- 34
- Репутация
- 240 (0)
05.03.2010 10:27perl - это язык программирования, типа бэйсика,
пакет activeperl это транслятор с этого языка с набором библиотек и модулей,
скачиваете пакет, например отсюда http://www.activestate.com/activeperl/, инсталлируете его, процесс инсталляции описывать не буду, там есть readme, будут конкретные вопросы - задавайте,
после инсталляции у вас в системе появится транслятор с языка perl,
работать с ним достаточно просто: пишете скрипт на перле, это обычный текстовый файл с расширением pl и подсовываете его транслятору:
perl.exe скрипт.pl
в нашем конкретном случает строка запуска из виндовой cmd будет выглядеть так:
perl.exe setwavinfo.pl -i "входной файл.wav" -o "выходной файл.wav" -a "имя исполнителя" -n "название произведения"
"входной файл.wav" и "выходной файл.wav" это либо имена файлов с полным путем, либо файлы без пути, но находящиеся в каталоге из которого запускается скрипт
максимальная windows 7 или vista имеют целую юникс подсистему в которой уже есть перл и в них activeperl можно не устанавливать,
вообще, очень рекомендую освоить этот язык, он достаточно прост и логичен, и бывает очень полезен для решения разного рода задач;
напишу скрипт генерации строк запуска setwavinfo.pl с использованием существующего дерева каталогов медиатеки
-
-
- Адрес
- Московская обл.
- Сообщений
- 2,432
- Репутация
- 6701 (0)
05.03.2010 10:59Меня очень интересует, но при этом я не хочу брать вставные наушники, "ухи" у меня чересчур чувствительные, да и на ходу я их не буду использовать, поэтому вопрос- кто-нибудь пробовал с М10 накладные наушники- открытого, полуоткрытого или закрытого типа- с этим я пока не определился. Будет очень интересно почитать, чтобы сузить кол-во вариантов.Плеер-
Наушники-
-
- Адрес
- Planet the Earth
- Сообщений
- 834
- Репутация
- 1373 (0)
05.03.2010 11:10Audio-Technica ATH-ESW9 замечательно играют, достойные уши для этого аппарата
Sony PCM-M10, Westone UM3X
-
- Сообщений
- 245
- Репутация
- 170 (0)
05.03.2010 20:03kitket, ну тут кагбэ нужен бюджет, предпочтения в акустическом оформлении наушников(открытые, закрытые) и музыкальных жанрах.... и, возможно, в дизайне))) (дада, есть и такие люди)))
ATH-ES7 на запчасти
DT860 на запчасти (обе версии)
-
- Сообщений
- 88
- Репутация
- 70 (0)
06.03.2010 13:15А М-10 потянет Audio-Technica ATH-ESW9? У них сопротивление довольно большое, 42 ом, и чустввительность заявлена не очень большая?
А
бюджет желательно максимум до 200 у.е., если можно хорошие уши купить дешевле, буду рад, т.к. не миллионер. С другой стороны, я не из тех людей, которые меняют такие вещи раз в полгода, если куплю, то надолго, поэтому о цене можно еще думать.
-
- Адрес
- Planet the Earth
- Сообщений
- 834
- Репутация
- 1373 (0)
06.03.2010 13:28Еще как потянет и раскачает, это ведь уши для портатива, но звучат не хуже любых полноразмерных для стационара. Сопротивление тут ни о чем не говорит. Зато шума тракта вообще нет, а на 16 Ом есть.Звучат замечательно для музыкальных жанров. Если еще сделать небольшой мод, как я, то звук можно собрать и уплотнить, и можно слушать тяжелые стили. Еще есть ESW10, почти такие же, но на много дороже.
Кстати, видел их на барахолке у нас.Sony PCM-M10, Westone UM3X
-
- Сообщений
- 4,347
- Репутация
- 11059 (0)
06.03.2010 13:31kitket, 42ом это самое обычное сопротивление, не переживайте
I'm looking for a boy
Made in Japan
A sex friend, a toy
Love in a magical, magical, magical world
-
- Сообщений
- 245
- Репутация
- 170 (0)
06.03.2010 17:27kitket, m10 потянет и 100 ом
около 200 баксов говорите... раз уж о муз. жанрах и акустическом оформлении не сказали, то вырисовывается примерно след картина
варианты в разнобой
-GRADO SR225i или ниже
-Audio-Technica ATH-AD900 Air где-то в этом районе или ниже
-Beyerdynamic 770, 990 не уверен что как следует прокачают, но почему же не попробовать (кстати, поглядите 860 вдруг понравится)
-Denon AH-D1000 (в денонах не рублю, но кому-то нравится, так что вариант)
-AKG K601 опять же сопротивление высоковато, но есть шанс)
-AKG K240 MKII (или подобные) тут все норм с сопротивлением
-Sennheiser HD25 SP II портативный вариант, сопротивление высоковато, но с такой чувствительностью проблем возникнуть не должно
градо и акг - в основном для неметаллических жанров
бейеры,аудиотехника и зеннхайзер - переварят все я думаю
денон - см. прим. к денону)))
в принципе, достаточно исчерпывающий список, дальше выбирайте согласно музыкальным предпочтениям, цене и раскачиваемости. цены могут различаться.
З.Ы. кстати, арматура, по крайней мере, достаточно нежна с барабанными перепонками... (тоже уши довольно чувствительные и кстати до сих пор не приемлющие закрытых наушников)Последний раз редактировалось moro202; 06.03.2010 в 17:35.
ATH-ES7 на запчасти
DT860 на запчасти (обе версии)
-
- Сообщений
- 34
- Репутация
- 240 (0)
06.03.2010 18:25скрипт для генерации строк запуска setwavinfo.pl
способ запуска:
perl runsetwavinfo.pl -s "корневой каталог медиатеки" -d "где создавать файлы"
пример:
C:\Perl64\bin\perl.exe runsetwavinfo.pl -s "E:\\2_Media\\audio\\cd" -d "F:\\sony"
двойной обратный слэш в путях обязателен;
создавать файлы лучше всего на жестком диске и уже потом переносить их на sd, иначе будет очень долго;
скрипт сканирует все вложенные каталоги заданного "корневого каталога медиатеки" и для каждого найденного wav файла генерирует строку запуска setwavinfo.pl, в качестве "исполнителя" берется имя самого верхнего каталога, а название композиции - имя файла без расширения;
скрипт генерирует команды создания дерева каталогов в папке "где создавать файлы", это дерево совпадает с оригинальным за исключением папки самого нижнего уровня, той, в которой лежат wav файлы,
т.к. сонька не понимает вложенные каталоги и отображает в виде одноуровневого списка только те из них, которые содержат файлы, в название такого последнего каталога скрипт включит по порядку через пробел имена всех его родительских каталогов с удаленными пробелами и переводом в верхний регистр первых букв всех слов,
скрипт так-же переведет кириллицу в транслит;
для ясности приведу пример,
допустим скрипт запускается с такими параметрами:
C:\Perl64\bin\perl.exe runsetwavinfo.pl -s "E:\\2_Media\\audio\\cd" -d "F:\\sony"
структура каталога E:\2_Media\audio\cd:
E:\2_Media\audio\cd\
......Jacques Loussier\ <- это будет имя исполнителя
...........Vivaldi the four seasons\
................01 Concerto No.1 In E Majo Allegro .wav
скрипт сгенерирует команду создания каталога:
mkdir "F:\sony\Jacques Loussier\JacquesLoussier VivaldiTheFourSeasons"
и строку запуска:
C:\Perl64\bin\perl.exe setwavinfo.pl -i "E:\2_Media\audio\cd\Jacques Loussier\Vivaldi the four seasons\01 Concerto No.1 In E Majo Allegro .wav" -o "F:\sony\Jacques Loussier\JacquesLoussier VivaldiTheFourSeasons\01 Concerto No.1 In E Majo Allegro .wav" -a "Jacques Loussier" -n "Concerto No.1 In E Majo Allegro"
и еще, у меня все имена wav файлов для удобства сортировки начинаются с порядкового номера композиции в альбоме, скрипт учитывает это и удалает номера при генерации названия композиции, выше в примере это видно;
use Getopt::Std;
use File::Find;
use File:ath;
use File::Spec;
my $mkdir_cmd = 'mkdir';
my $perl_exe = 'C:\Perl64\bin\perl.exe';
my $******_name = 'setwavinfo.pl';
my $gen_file = 'gensetwavinfo.bat';
my ($src_wav_root,$dst_wav_root,$src_wav_dir,$dst_wav _dir,$src_wav,$dst_wav,$done_dir,$last_dir,$artist ,$composition,$file_name);
my (@src_path,@dst_path);
getopt("sd:");
$src_wav_root = File::Spec->canonpath($opt_s);
$dst_wav_root = File::Spec->canonpath($opt_d);
$done_dir = $src_wav_root;
open(OUT_FILE,"> $gen_file") || die "can't open $gen_file: $!\n";
chdir ("$src_wav_root") || die "can't cd to $src_wav_root: $!\n";
finddepth(\&go, '.');
close(OUT_FILE);
sub go {
$File::Find::prune = true;
if ( uc(substr $_,-3) eq 'WAV') {
$file_name = $_;
$composition = ts($file_name);
$composition =~ s/^\d+\s*|\s*\.(?i)wav$//g;
if ( $done_dir ne $File::Find::dir) {
$done_dir = $File::Find::dir;
@src_path = File::Spec->splitdir( $done_dir );
@dst_path = @src_path;
$last_dir = '';
for ($i=1;$i<=$#src_path;$i++) {
$_ = $src_path[$i];
s/(\s|^)+(.)/uc($2)/eg;
$last_dir = $last_dir.($i>1&&' ').$_;
}
$artist = ts($src_path[1]);
$dst_path[$#dst_path] = $last_dir;
$dst_path[0] = File::Spec->canonpath($dst_wav_root);
$src_path[0] = File::Spec->canonpath($src_wav_root);
$src_wav_dir = File::Spec->catdir(@src_path);
$dst_wav_dir = ts(File::Spec->catdir(@dst_path));
print OUT_FILE "$mkdir_cmd \"$dst_wav_dir\"\n";
}
$dst_wav = File::Spec->catpath( '', $dst_wav_dir, $file_name );
$src_wav = File::Spec->catpath( '', $src_wav_dir, ts($file_name) );
print OUT_FILE "$perl_exe $******_name -i \"$src_wav\" -o \"$dst_wav\" -a \"$artist\" -n \"$composition\"\n";
}
}
sub ts($) # author: nrg@jabber.snc.ru
{
my %hs = ('а'=>'a','А'=>'A','б'=>'b','Б'=>'B','в'=>'v','В'= >'V','г'=>'g','Г'=>'G','д'=>'d','Д'=>'D',
'е'=>'e','Е'=>'E','ё'=>'jo','Ё'=>'Jo','ж'=>'zh','Ж '=>'Zh','з'=>'z','З'=>'Z','и'=>'i','И'=>'I',
'й'=>'j','Й'=>'J','к'=>'k','К'=>'K','л'=>'l','Л'=> 'L','м'=>'m','М'=>'M','н'=>'n','Н'=>'N',
'о'=>'o','О'=>'O','п'=>'p','П'=>'P','р'=>'r','Р'=> 'R','с'=>'s','С'=>'S','т'=>'t','Т'=>'T',
'у'=>'u','У'=>'U','ф'=>'f','Ф'=>'F','х'=>'kh','Х'= >'Kh','ц'=>'c','Ц'=>'C','ч'=>'ch','Ч'=>'Ch',
'ш'=>'sh','Ш'=>'Sh','щ'=>'shh','Щ'=>'Shh','ъЪ'=>'' ,'ы'=>'y','Ы'=>'Y','ьЬ'=>'',
'э'=>'eh','Э'=>'Eh','ю'=>'ju','Ю'=>'Ju','яЯ'=>'ja' ,'Я'=>'Ja');
my $z=shift;
pop @{([\map do{$z=~s/$_/$hs{$_}/g;},keys %hs])},$z;$z
}
-
-
-
- Сообщений
- 245
- Репутация
- 170 (0)
06.03.2010 18:55роооозовый рекоооордер! какая прелесть)))))) почти такая же как и белый http://techngear.com/wp-content/uplo...et-Recorde.jpg
http://www.sony-asia.com/corporate/r...09/PCM-M10.jpg а тут еще 2 оттенка черного
кстати я был уверен что тэги появятся именно там, а не где-нибудь еще)))ATH-ES7 на запчасти
DT860 на запчасти (обе версии)
-
- Сообщений
- 34
- Репутация
- 240 (0)
-
Пользователи, сказавшие Спасибо boneear за полезный пост
prima (10.03.2010)
-
- Адрес
- Москва
- Сообщений
- 122
- Репутация
- 100 (0)
12.03.2010 08:32http://mobile-review.com/mp3/review/sony-pcm10.shtml
вот и обзор вышел)
интересный аппаратмузыка наполняет меня, течет вместе с кровью и расходится приятной волной по телу (c)
-
12.03.2010 11:38
Да, на этот раз фотки ничего так получились.
Изучаю спрос на кастомные Ultimate Ears UE-11 PRO (на рефит), пишите в личку
-
Пользователи, сказавшие Спасибо localhost за полезный пост
gav17 (12.03.2010)
-
12.03.2010 13:58
"Спасиба" не за фотки )
Сергей, тел.+7(92I)953-49-8I, email gav1772 собака gmail.com
Информация о теме
Пользователи, просматривающие эту тему
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)
Похожие темы
-
Sony NWZ-A17 + Sony PHA-1A + Sony CKS-NWA10 + DIGNIS
от Эдъ в разделе АрхивОтветов: 6Последнее сообщение: 01.05.2019, 22:31 -
Sony XBA-Z5 + Sony PHA-3 + кабель Sony MUC-M12SB1
от michael07svl в разделе АрхивОтветов: 15Последнее сообщение: 20.03.2019, 17:46 -
Куплю один наушник Sony XBA-A3 или пару Sony XBA-A3 или Sony XBA-Z5
от Dubroleg в разделе АрхивОтветов: 4Последнее сообщение: 11.01.2016, 05:04