1

Тема: AHK:Оффлайн радио-Создание CUE

Около года назад открыл для себя программу Audacity. С тех пор постоянно нахаляву качаю радио на свой компьютер. По принципу: на ночь включил и всю ночь музыка пишется в формате flac. Качество хорошее но и вес тоже неплохой: сейчас у меня ~100ГБ. Все бы хорошо, но треки большие по 6-8 ГБ. Поэтому вроде музыки много а толку мало, так как надоест такой трек.
Вот я и придумал себе помощника который на каждый имеющийся в папке файл *.flac напишет мне файл *.cue, с разбивкой на 10-минутные треки. Потом папку загружаешь в плейлист AIMP, включаешь случайный выбор и кайфуешь. Чувство новизны!


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;              Оффлайн радио-Создание CUE          ;;;
;;;                Claus555, 11/03/2018г.            ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Данный скрипт позволяет разбить большие flac файлы на треки по 10 минут
;путем создания одноименных файлов .cue
;При добавлении обработанной таким образом папки с файлами flac
;в плейлист AIMP-плеера, в нем будут созданы треки по 10 минут,
;которые можно проигрывать в случайном порядке!

;Есть два режима работы скрипта: 1)Работа с отдельным файлом
;2)Пакетный режим(работа с папкой)
;Рекомендую сперва выбрать пакетный режим, а недочеты исправлять в первом режиме

;Меры предосторожности: в пакетном режиме
;если файл CUE с данным именем уже существует, он переписываться НЕ БУДЕТ
;все останется как есть.

InputBox, mod, Выберите режим (файл`,пакетный),
(
Какой режим вы выбираете?`nфайл-введите "1"
пакетный(папка)-введите  "2"
)
if (mod = "") ;если не выбран режим-выход
ExitApp 

SizeTrek:=116300 ;кБ - вес 10 минут , надо определять опытным путем

InputBox, Size, Введите вес трека (кБ/10мин) ,
(
Высчитать вес трека можно по формуле:
SizeTrek=(Размер Файла(кБ)/Общее время звучания(мин))*10
По умолчанию %SizeTrek%кБ
)
if (Size != "") 
SizeTrek:=Size

if (mod=1)
Gosub, s1
else if (mod=2)
Gosub, s2
ExitApp 

s1: 
t1=---------------------------------------------Выберите файл(*.flac)
t2=для разбивки -----------------------------------
FileSelectFile, File, , ,%t1% %t2% 
if (File="") ;если не выбран файл-выход
Return 

SplitPath, File, Name ;имя файла + расширение
SplitPath, File,, Dir ;путь до файла
FileName:=SubStr(Name, 1, InStr(Name, ".") -1) ;чистое имя (без расширения)
IfExist, %Dir%\%Name%.cue ;если файл cue существует
{
	MsgBox , 4, , Файл *.cue существует, переписать его?
	IfMsgBox Yes
	{
	FileDelete, %Dir%\%FileName%.cue 
	Gosub, s3
	}
	else
	ExitApp
}
s3:
FileGetSize, FileSize, %File%, K
if (FileSize<=SizeTrek) ; если размер файла меньше размера трека
ExitApp 

SumTrek:=Floor(FileSize/SizeTrek) ;количество 10-минутных треков в файле
Rec=
(
FILE `"%Name%`" WAVE
TRACK 1 AUDIO
INDEX 01 00:00:00
)
FileAppend, %Rec%`n, %Dir%\%FileName%.cue

Loop, % SumTrek
	{
	NTrek:=A_Index+1
	Trek_Min:=(NTrek-1)*10
Rec=
(
TRACK %NTrek% AUDIO
INDEX 01 %Trek_Min%:00:00
)
	FileAppend, %Rec%`n, %Dir%\%FileName%.cue
	}
ExitApp 
	
s2:
txt:=" Выберите папку с файлами FLAC `n в ней для каждого файла flac будет создан свой cue `n с разбивкой на треки по 10 мин" 
FileSelectFolder, Folder ,  ,  ,  %txt%
if (Folder="") ;если не выбрана папка-выход
return

;Просмотр содержимого папки 
Loop, %Folder%\*.flac  	;, , 1  Рекурсия: Просмотр всех папок, в том числе вложенных(Выведено).
{
FileName:=SubStr(A_LoopFileName, 1, InStr(A_LoopFileName, ".") -1) ;чистое имя (без расширения)
IfExist, %A_LoopFileDir%\%FileName%.cue ;если файл cue существует 
continue ;прокрутка цикла вперед 

if (A_LoopFileSizeKB<=SizeTrek) ; если размер файла меньше размера трека
continue ;прокрутка цикла вперед

SumTrek:=Floor(A_LoopFileSizeKB/SizeTrek) ;количество 10-минутных треков в файле

Rec=
(
FILE `"%A_LoopFileName%`" WAVE
TRACK 1 AUDIO
INDEX 01 00:00:00
)
FileAppend, %Rec%`n, %A_LoopFileDir%\%FileName%.cue

	Loop, % SumTrek
	{
	NTrek:=A_Index+1
	Trek_Min:=(NTrek-1)*10
Rec=
(
TRACK %NTrek% AUDIO
INDEX 01 %Trek_Min%:00:00
)
	FileAppend, %Rec%`n, %A_LoopFileDir%\%FileName%.cue
	}
}
ExitApp

Таким же макаром можно и MP3 и другие форматы обрабатывать только нужно немножко скрипт подогнать под нужное расширение.