Compare commits
3 Commits
version-1.
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f95029535 | ||
|
|
46122c53c2 | ||
|
|
81acafc6da |
BIN
Audiobook Maker 2.7 src.zip
Executable file
30
Podcast.POD
@@ -1,30 +0,0 @@
|
|||||||
[Podcast]
|
|
||||||
|
|
||||||
altfolder1=Test
|
|
||||||
basename=Test
|
|
||||||
audiobook=true
|
|
||||||
artwork=Bild.jpg
|
|
||||||
imgwidth=50
|
|
||||||
imgheight=50
|
|
||||||
editpointcount=3
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_1]
|
|
||||||
image=Bild.jpg
|
|
||||||
audiofile=02 Take On Me.m4a
|
|
||||||
chapter=1
|
|
||||||
start=00:00:00.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_2]
|
|
||||||
image=Bild.jpg
|
|
||||||
audiofile=08 - Nie wieder Krieg, nie mehr Las Vegas.m4a
|
|
||||||
chapter=2
|
|
||||||
start=00:02:59.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_3]
|
|
||||||
image=Bild.jpg
|
|
||||||
audiofile=16 - Trick 17 m. s..m4a
|
|
||||||
chapter=3
|
|
||||||
start=00:05:37.00
|
|
||||||
2
Profile/Album Interpret Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Album Interpret" verwenden
|
||||||
|
<%tag<id='album_artist'>>
|
||||||
2
Profile/Album Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Album" verwenden
|
||||||
|
<%tag<id='album'>>
|
||||||
2
Profile/Dateiname.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#Dateinamen ohne Endung verwenden
|
||||||
|
<%fileName<showExtention='false'>>
|
||||||
2
Profile/Interpret Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Interpret" verwenden
|
||||||
|
<%tag<id='artist'>>
|
||||||
2
Profile/Komponist Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Komponist" verwenden
|
||||||
|
<%tag<id='composer'>>
|
||||||
6
Profile/Nummer+Titel Tag.txt
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#Beispiel:
|
||||||
|
#Dateiname: "1 01-BspDatei.m4a"
|
||||||
|
#Titel Tag: "BspTitel"
|
||||||
|
#Kapitelnummer im Hörbuch: "3"
|
||||||
|
#wird zu "003 - BspTitel"
|
||||||
|
<%number<formatted='true'>> - <%tag<id='title'>>
|
||||||
2
Profile/Nummerierung.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#Kapitel 001, Kapitel 002, ...
|
||||||
|
Kapitel <%number<formatted='true'>>
|
||||||
1
Profile/Tag
Executable file
@@ -0,0 +1 @@
|
|||||||
|
<%tag<def='title'>>
|
||||||
1
Profile/Tag.txt
Executable file
@@ -0,0 +1 @@
|
|||||||
|
<%number<formatted='false'>>
|
||||||
2
Profile/Titel Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Titel" verwenden
|
||||||
|
<%tag<id='title'>>
|
||||||
2
Profile/Tracknummer Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Tracknummer" verwenden
|
||||||
|
<%tag<id='track'>>
|
||||||
4
Profile/iTunes Standard.txt
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#Beispiel:
|
||||||
|
#Dateiname: "01 BspDatei.m4a"
|
||||||
|
#wird zu "BspDatei"
|
||||||
|
<%advancedFileName<sepText=' ' index='2#'>>
|
||||||
4
Profile/iTunes mit Bindestrich.txt
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#Beispiel:
|
||||||
|
#Dateiname: "01 - BspDatei.m4a"
|
||||||
|
#wird zu "BspDatei"
|
||||||
|
<%advancedFileName<sepText=' - ' index='2#'>>
|
||||||
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Audiobook Maker
|
||||||
|
|
||||||
|
The Audiobook Maker - one of my first projects. The Audiobook Maker takes a folder of MP3 files as well as some metadata and creates a .POD file from those. The .POD file can then be processed by the Slideshow Assembler in order to generate a mp4 audiobook.
|
||||||
28
Settings.xml
Executable file
@@ -0,0 +1,28 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Document : Settings.xml
|
||||||
|
Created on : 11. Januar 2011, 15:50
|
||||||
|
Author : Kim
|
||||||
|
Description:
|
||||||
|
Purpose of the document follows.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--<!DOCTYPE Settings
|
||||||
|
[
|
||||||
|
<!ELEMENT Settings (Setting+, Profile+)>
|
||||||
|
<!ELEMENT Setting (#PCDATA)>
|
||||||
|
<!ATTLIST Setting key CDATA >
|
||||||
|
<!ELEMENT Profile ()>
|
||||||
|
<!ATTLIST Profile Name ID >
|
||||||
|
<!ATTLIST Profile SepChar CDATA >
|
||||||
|
<!ATTLIST Profile Selected CDATA >
|
||||||
|
]>-->
|
||||||
|
|
||||||
|
<Settings>
|
||||||
|
<Setting key="DetectNames">true</Setting>
|
||||||
|
<Setting key="MoveOrCopy">Move</Setting>
|
||||||
|
<Setting key="AutoExit">true</Setting>
|
||||||
|
<Profile Name="Standart 1" SepChar='-' Selected="true">[Artist][Album][Title]</Profile>
|
||||||
|
<Profile Name="Standart 2" SepChar='-' Selected="false">[Title]</Profile>
|
||||||
|
</Settings>
|
||||||
74
build.xml
@@ -1,74 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!-- You may freely edit this file. See commented blocks below for -->
|
|
||||||
<!-- some examples of how to customize the build. -->
|
|
||||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
|
||||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
|
||||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
|
||||||
<!-- the Compile on Save feature is turned off for the project. -->
|
|
||||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
|
||||||
<!-- in the project's Project Properties dialog box.-->
|
|
||||||
<project name="Audiobook_Maker_1.0" default="default" basedir=".">
|
|
||||||
<description>Builds, tests, and runs the project Audiobook Maker 1.0.</description>
|
|
||||||
<import file="nbproject/build-impl.xml"/>
|
|
||||||
<!--
|
|
||||||
|
|
||||||
There exist several targets which are by default empty and which can be
|
|
||||||
used for execution of your tasks. These targets are usually executed
|
|
||||||
before and after some main targets. They are:
|
|
||||||
|
|
||||||
-pre-init: called before initialization of project properties
|
|
||||||
-post-init: called after initialization of project properties
|
|
||||||
-pre-compile: called before javac compilation
|
|
||||||
-post-compile: called after javac compilation
|
|
||||||
-pre-compile-single: called before javac compilation of single file
|
|
||||||
-post-compile-single: called after javac compilation of single file
|
|
||||||
-pre-compile-test: called before javac compilation of JUnit tests
|
|
||||||
-post-compile-test: called after javac compilation of JUnit tests
|
|
||||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
|
||||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
|
||||||
-pre-jar: called before JAR building
|
|
||||||
-post-jar: called after JAR building
|
|
||||||
-post-clean: called after cleaning build products
|
|
||||||
|
|
||||||
(Targets beginning with '-' are not intended to be called on their own.)
|
|
||||||
|
|
||||||
Example of inserting an obfuscator after compilation could look like this:
|
|
||||||
|
|
||||||
<target name="-post-compile">
|
|
||||||
<obfuscate>
|
|
||||||
<fileset dir="${build.classes.dir}"/>
|
|
||||||
</obfuscate>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
For list of available properties check the imported
|
|
||||||
nbproject/build-impl.xml file.
|
|
||||||
|
|
||||||
|
|
||||||
Another way to customize the build is by overriding existing main targets.
|
|
||||||
The targets of interest are:
|
|
||||||
|
|
||||||
-init-macrodef-javac: defines macro for javac compilation
|
|
||||||
-init-macrodef-junit: defines macro for junit execution
|
|
||||||
-init-macrodef-debug: defines macro for class debugging
|
|
||||||
-init-macrodef-java: defines macro for class execution
|
|
||||||
-do-jar-with-manifest: JAR building (if you are using a manifest)
|
|
||||||
-do-jar-without-manifest: JAR building (if you are not using a manifest)
|
|
||||||
run: execution of project
|
|
||||||
-javadoc-build: Javadoc generation
|
|
||||||
test-report: JUnit report generation
|
|
||||||
|
|
||||||
An example of overriding the target for project execution could look like this:
|
|
||||||
|
|
||||||
<target name="run" depends="Audiobook_Maker_1.0-impl.jar">
|
|
||||||
<exec dir="bin" executable="launcher.exe">
|
|
||||||
<arg file="${dist.jar}"/>
|
|
||||||
</exec>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
Notice that the overridden target depends on the jar target and not only on
|
|
||||||
the compile target as the regular run target does. Again, for a list of available
|
|
||||||
properties which you can use, check the target you are overriding in the
|
|
||||||
nbproject/build-impl.xml file.
|
|
||||||
|
|
||||||
-->
|
|
||||||
</project>
|
|
||||||
BIN
dist/Audiobook_Maker.jar
vendored
Executable file
32
dist/README.TXT
vendored
Executable file
@@ -0,0 +1,32 @@
|
|||||||
|
========================
|
||||||
|
BUILD OUTPUT DESCRIPTION
|
||||||
|
========================
|
||||||
|
|
||||||
|
When you build an Java application project that has a main class, the IDE
|
||||||
|
automatically copies all of the JAR
|
||||||
|
files on the projects classpath to your projects dist/lib folder. The IDE
|
||||||
|
also adds each of the JAR files to the Class-Path element in the application
|
||||||
|
JAR files manifest file (MANIFEST.MF).
|
||||||
|
|
||||||
|
To run the project from the command line, go to the dist folder and
|
||||||
|
type the following:
|
||||||
|
|
||||||
|
java -jar "Audiobook_Maker.jar"
|
||||||
|
|
||||||
|
To distribute this project, zip up the dist folder (including the lib folder)
|
||||||
|
and distribute the ZIP file.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
* If two JAR files on the project classpath have the same name, only the first
|
||||||
|
JAR file is copied to the lib folder.
|
||||||
|
* Only JAR files are copied to the lib folder.
|
||||||
|
If the classpath contains other types of files or folders, these files (folders)
|
||||||
|
are not copied.
|
||||||
|
* If a library on the projects classpath also has a Class-Path element
|
||||||
|
specified in the manifest,the content of the Class-Path element has to be on
|
||||||
|
the projects runtime path.
|
||||||
|
* To set a main class in a standard Java project, right-click the project node
|
||||||
|
in the Projects window and choose Properties. Then click Run and enter the
|
||||||
|
class name in the Main Class field. Alternatively, you can manually type the
|
||||||
|
class name in the manifest Main-Class element.
|
||||||
BIN
dist/lib/jaudiotagger-2.0.1.jar
vendored
Executable file
BIN
dist/lib/myLibrary.jar
vendored
Executable file
BIN
dist/lib/swing-layout-1.0.4.jar
vendored
Executable file
BIN
exec/Audiobook Maker Installation.exe
Executable file
BIN
exec/Audiobook Maker.exe
Executable file
BIN
exec/Audiobook Maker.jar
Executable file
89
exec/Audiobook Maker.nsi
Executable file
@@ -0,0 +1,89 @@
|
|||||||
|
!include "MUI.nsh"
|
||||||
|
!include "LogicLib.nsh"
|
||||||
|
|
||||||
|
Name "Audiobook Maker"
|
||||||
|
OutFile "Audiobook Maker Installation.exe"
|
||||||
|
|
||||||
|
!define INSTALLATIONNAME "Audiobook Maker"
|
||||||
|
!define thisPath "C:\Documents and Settings\Kim\Desktop\Java\Audiobook Maker\exec"
|
||||||
|
|
||||||
|
InstallDir "$PROGRAMFILES\Audiobook Maker"
|
||||||
|
|
||||||
|
!define MUI_PAGE_HEADER_TEXT "Changelog"
|
||||||
|
!define MUI_PAGE_HEADER_SUBTEXT "Audiobook Maker 2.8 Beta Changelog"
|
||||||
|
!define MUI_LICENSEPAGE_TEXT_TOP "Audiobook Maker 2.8 Beta Changelog"
|
||||||
|
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Klicken Sie auf Weiter um mit der Installation fortzufahren"
|
||||||
|
!define MUI_LICENSEPAGE_BUTTON "Weiter"
|
||||||
|
!insertmacro MUI_PAGE_LICENSE "changelog.rtf"
|
||||||
|
|
||||||
|
!insertmacro MUI_PAGE_COMPONENTS
|
||||||
|
!insertmacro MUI_PAGE_DIRECTORY
|
||||||
|
!insertmacro MUI_PAGE_INSTFILES
|
||||||
|
|
||||||
|
!define MUI_FINISHPAGE_RUN "$INSTDIR\Audiobook Maker.exe"
|
||||||
|
!define MUI_FINISHPAGE_RUN_TEXT "Audiobook Maker starten"
|
||||||
|
!define MUI_FINISHPAGE_SHOWREADME "${thisPath}\Readme\Readme+Guide.html"
|
||||||
|
!define MUI_FINISHPAGE_SHOWREADME_TEXT "Readme zeigen"
|
||||||
|
!insertmacro MUI_PAGE_FINISH
|
||||||
|
|
||||||
|
!insertmacro MUI_UNPAGE_CONFIRM
|
||||||
|
!insertmacro MUI_UNPAGE_INSTFILES
|
||||||
|
!insertmacro MUI_LANGUAGE "German"
|
||||||
|
|
||||||
|
Section ""
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
File "${thisPath}\Audiobook Maker.exe"
|
||||||
|
File "${thisPath}\Audiobook Maker.jar"
|
||||||
|
SetOutPath "$INSTDIR\lib"
|
||||||
|
File "${thisPath}\lib\"
|
||||||
|
WriteUninstaller $INSTDIR\Uninstall.exe
|
||||||
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "DisplayName" "Forth Installer"
|
||||||
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||||
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoModify" 1
|
||||||
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoRepair" 1
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Profile" Profile
|
||||||
|
SetOutPath "$INSTDIR\Profile\"
|
||||||
|
File "${thisPath}\Profile\"
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Start Menu Eintrag" Start
|
||||||
|
CreateDirectory "$SMPROGRAMS\${INSTALLATIONNAME}"
|
||||||
|
CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
||||||
|
CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\Audiobook Maker.lnk" "$INSTDIR\Audiobook Maker.exe"
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Desktopverknüpfung" Desktop
|
||||||
|
SetOutPath "$INSTDIR"
|
||||||
|
CreateShortcut "$DESKTOP\Audiobook Maker.lnk" "$INSTDIR\Audiobook Maker.exe"
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
Section "Zusätzliche Dateien" addFiles
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
File "${thisPath}\changelog.txt"
|
||||||
|
SetOutPath "$INSTDIR\Readme\"
|
||||||
|
File "${thisPath}\Readme\"
|
||||||
|
SetOutPath $INSTDIR
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
||||||
|
!insertmacro MUI_DESCRIPTION_TEXT ${Profile} "Installiert die Standard Profile"
|
||||||
|
!insertmacro MUI_DESCRIPTION_TEXT ${Start} "Erstellt einen Ordner im Startmenu"
|
||||||
|
!insertmacro MUI_DESCRIPTION_TEXT ${Desktop} "Verknüpfung auf Desktop erstellen"
|
||||||
|
!insertmacro MUI_DESCRIPTION_TEXT ${addFiles} "Zusätzliche Dateien Extrahieren: Readme und changelog"
|
||||||
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||||||
|
|
||||||
|
Section "Uninstall"
|
||||||
|
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}"
|
||||||
|
RMDir /r "$INSTDIR\lib\"
|
||||||
|
RMDir /r "$INSTDIR\Profile\"
|
||||||
|
RMDir /r "$INSTDIR\Readme\"
|
||||||
|
RMDir /r "$INSTDIR\"
|
||||||
|
RMDir /r "$SMPROGRAMS\${INSTALLATIONNAME}\"
|
||||||
|
Delete "$DESKTOP\Audiobook Maker.lnk"
|
||||||
|
SectionEnd
|
||||||
BIN
exec/Audiobook Maker.zip
Executable file
2
exec/Profile/Album Interpret Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Album Interpret" verwenden
|
||||||
|
<%tag<id='album_artist'>>
|
||||||
2
exec/Profile/Album Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Album" verwenden
|
||||||
|
<%tag<id='album'>>
|
||||||
2
exec/Profile/Dateiname.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#Dateinamen ohne Endung verwenden
|
||||||
|
<%fileName<showExtention='false'>>
|
||||||
2
exec/Profile/Interpret Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Interpret" verwenden
|
||||||
|
<%tag<id='artist'>>
|
||||||
2
exec/Profile/Komponist Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Komponist" verwenden
|
||||||
|
<%tag<id='composer'>>
|
||||||
6
exec/Profile/Nummer+Titel Tag.txt
Executable file
@@ -0,0 +1,6 @@
|
|||||||
|
#Beispiel:
|
||||||
|
#Dateiname: "1 01-BspDatei.m4a"
|
||||||
|
#Titel Tag: "BspTitel"
|
||||||
|
#Kapitelnummer im Hörbuch: "3"
|
||||||
|
#wird zu "003 - BspTitel"
|
||||||
|
<%number<formatted='true'>> - <%tag<id='title'>>
|
||||||
2
exec/Profile/Nummerierung.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#Kapitel 001, Kapitel 002, ...
|
||||||
|
Kapitel <%number<formatted='true'>>
|
||||||
2
exec/Profile/Titel Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Titel" verwenden
|
||||||
|
<%tag<id='title'>>
|
||||||
2
exec/Profile/Tracknummer Tag.txt
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#iTunes Tag "Tracknummer" verwenden
|
||||||
|
<%tag<id='track'>>
|
||||||
4
exec/Profile/iTunes Standard.txt
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#Beispiel:
|
||||||
|
#Dateiname: "01 BspDatei.m4a"
|
||||||
|
#wird zu "BspDatei"
|
||||||
|
<%advancedFileName<sepText=' ' index='2#'>>
|
||||||
4
exec/Profile/iTunes mit Bindestrich.txt
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#Beispiel:
|
||||||
|
#Dateiname: "01 - BspDatei.m4a"
|
||||||
|
#wird zu "BspDatei"
|
||||||
|
<%advancedFileName<sepText=' - ' index='2#'>>
|
||||||
BIN
exec/Readme/Image.png
Executable file
|
After Width: | Height: | Size: 34 KiB |
21
exec/Readme/Profile.html
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Profile erstellen</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Kapitelprofile</h1>
|
||||||
|
Kapitelprofile sind Textdateien. Im Prinzip wird der Text darin genauso in jedes Kapitel als Name eingesetzt, allerdings besteht die Möglichkeit variable Textblöcke einzusetzten.
|
||||||
|
Diese haben folgende Formatierung: <%Name> bzw. <%Name<Parametername='Wert' Parameter2='Wert2'>><p />
|
||||||
|
Alle Zeilen vor dem eigentlichen Profil müssen mit "#" anfangen und werden als Information bei der Kapitelprofil Auswahl angezeigt. Die erste Zeile, die nicht mit "#" beginnt, ist das Profil. Weitere Zeilen werden <b>nicht</b> übernommen
|
||||||
|
Mögliche Blöcke:
|
||||||
|
<ul>
|
||||||
|
<li><b><%filePath></b> - Dateipfad des Kapitels</li>
|
||||||
|
<li><b><%fileName<showExtention='true|false'>></b> - Der Dateiname mit oder ohne Endung</li>
|
||||||
|
<li><b><%number<formatted='true|false'>></b> - Tracknummer im Hörbuch. Wenn formatted='true', dann werden die Nummern formatiert: 001, 002...</li>
|
||||||
|
<li><b><%tag<id='title|album|artist|album_artist|track|composer'>></b> - Ein Tag aus der Datei (title: Titel, album: Albumname, artist: Interpret, album_artist: Albuminterpret, track: Tracknummer, composer: Komponist)</li>
|
||||||
|
<li><b><%advancedFileName<sepText='' index=''>></b> - Ein Teil des Dateinamens. Die Teile werden durch sepText getrennt und der benutzte Teil im index angegebn. Wenn der index mit "#" endet werden alle Teile ab dort übernommen</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
Im Ordner Profile finden Sie fertige Profile.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
68
exec/Readme/Readme+Guide.html
Executable file
@@ -0,0 +1,68 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Audiobook Maker</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Bitte komplett lesen!
|
||||||
|
<h1>Readme</h1>
|
||||||
|
<h2>Installation</h2>
|
||||||
|
<b>Wichtig: Dieses Programm ist nur auf Windows-Betriebssystemen vollständig nutzbar.</b><br />
|
||||||
|
Um den Audiobook Maker benuzen zu können, muss der Slideshow Assembler von JR Learns Media installiert sein. Um diesen zu installieren führen Sie die ssa_setup105a.exe mit einem Doppelklick aus und folgen Sie den Anweisungen.
|
||||||
|
Es ist wichtig, dass der Slideshow Assembler in der PATH Umgebungsvariable eingetragen wurde. Überprüfen Sie dies, indem Sie zu den Umgebungsvariablen navigieren (Systemsteuerung --> System --> Erweitert --> Umgebungsvariablen) und bei
|
||||||
|
der PATH Variable auf bearbeiten klicken. Suchen Sie in dem unteren Textfeld nach Dem Verzeichnis, in das Sie den Slideshow Assembler installiert haben(z.B. C:\Programme\Slideshow Assembler\). Wenn dieser Eintrag nicht vorhanden ist, fügen
|
||||||
|
Sie am Ende des Variablenwertes ";C:\Programme\Slideshow Assambler\"(bzw. Das Verzeichnis, in welches der Slideshow Assambler installiert wurde) ohne Anführungszeichen hinzu.<br />
|
||||||
|
Nach der Installation müssen Sie ihren Computer neu starten.<p />
|
||||||
|
|
||||||
|
Da der Audiobook Maker Java benutzt müssen Sie <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java</a> installieren(Das JRE)<p />
|
||||||
|
|
||||||
|
Um den Audiobook Maker zu installieren führen Sie die Audiobook Maker Installationsdatei aus.<p />
|
||||||
|
|
||||||
|
Getestet auf Windows XP Professional 32bit mit und <b>Java 7</b><p />
|
||||||
|
|
||||||
|
<h1>Guide</h1>
|
||||||
|
Der Guide gibt ein Beispiel, wie ein Hörbuch erstellt werden kann. Bei vielen Schritten ist Drag-and-Drop unterstützt. Mit [] gekennzeichnete Schritte sind optional.
|
||||||
|
|
||||||
|
<img alt="Image.png" src="Image.png" />
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Dateien auswählen <b><font color = "#FF0000">(3)</font></b> (Es werden Alle Dateien in ausgewählten Ordnern und Unterordnern hinzugefügt)</li>
|
||||||
|
<li>[Die Kapitel automatisch umbenennen (--><a href="Profile.html">Kapitelprofile</a>) oder sortieren lassen <b><font color = "#FF0000">(2)</font></b>]</li>
|
||||||
|
<li>[Die Kapitel manuell sortieren <b><font color = "#FF0000">(4)</font></b> / manuell umbenennen <b><font color = "#FF0000">(5)</font></b> (Wird automatisch übernommen)]</li>
|
||||||
|
<li>[Eine Coverdatei für das Hörbuch angeben <b><font color = "#FF0000">(7)</font></b>]</li>
|
||||||
|
<li>Den Ordner für Die Dateien auswählen <b><font color = "#FF0000">(7)</font></b></li>
|
||||||
|
<li>Angeben, ob die ausgewählten Dateien <b><font color = "#FF0000">(1)</font></b> in den Zielordner <b><font color = "#FF0000">(7)</font></b> kopiert oder verschoben werden sollen</li>
|
||||||
|
<li>[Tags für das Hörbuch angeben <b><font color = "#FF0000">(9)</font></b> (Es kann sein, dass die Tags nicht übernommen werden)]</li>
|
||||||
|
<li>Einen Namen für das Hörbuch auswählen und die .POD Datei erstellen. Im Anschluss daran kann das Hörbuch erstellt werden</li>
|
||||||
|
</ol>
|
||||||
|
<p />
|
||||||
|
|
||||||
|
<h1>Geplantes</h1>
|
||||||
|
<ul>
|
||||||
|
<li>Automatisches Konvertieren vom anderen Formaten</li>
|
||||||
|
<li>Fehler von SSA abfangen</li>
|
||||||
|
<li>SSA Ausgabe anzeigen</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h1>Bekannte Bugs</h1>
|
||||||
|
<ul>
|
||||||
|
<li>Wenn bei SSA ein Fehler auftritt, wird trotzdem der Dialog "Prozess erfolgreich abgeschlossen" angezeigt</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h1>Version 3</h1>
|
||||||
|
<ul>
|
||||||
|
<li>Möglichkeit aus einer langen Datei ein Hörbuch zu erstellen</li>
|
||||||
|
<li>Dateiunabhängige Zeiten</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
<h1>Links</h1>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://www.jrlearnsmedia.com/blog/articles/ssa-downloads.aspx">Slideshow Assembler von JR Learns Media</a> - Erstellt das richtige Hörbuch durch eine .POD Datei</li>
|
||||||
|
<li><a href="http://www.jthink.net/jaudiotagger/">JAudiotagger</a> - zum Auslesen der m4a Dateien</li>
|
||||||
|
<li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java</a></li>
|
||||||
|
<li><a href="http://www.f2ko.de/programs.php?lang=de&pid=b2e">Bat to Exe Converter</a> - Zum erstellen einer ausführbaren Datei, die die jar Datei ausführt</li>
|
||||||
|
<li><a href="http://nsis.sourceforge.net/Download">NSIS</a> - Um ein "Installationsprogramm" zum Extrahieren der Dateien zu erstellen</li>
|
||||||
|
</ul>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
1
exec/Start.bat
Executable file
@@ -0,0 +1 @@
|
|||||||
|
@Java -jar "Audiobook Maker.jar"
|
||||||
BIN
exec/audiobook_icon.ico
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
exec/audiobook_icon.png
Executable file
|
After Width: | Height: | Size: 3.6 KiB |
66
exec/changelog.rtf
Executable file
@@ -0,0 +1,66 @@
|
|||||||
|
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f36\froman\fcharset238\fprq2 Times New Roman CE;}
|
||||||
|
{\f37\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f39\froman\fcharset161\fprq2 Times New Roman Greek;}{\f40\froman\fcharset162\fprq2 Times New Roman Tur;}{\f41\froman\fcharset177\fprq2 Times New Roman (Hebrew);}
|
||||||
|
{\f42\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f43\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f44\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
|
||||||
|
\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;
|
||||||
|
\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden
|
||||||
|
Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
|
||||||
|
\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\rsidtbl \rsid2246780}{\*\generator Microsoft Word 10.0.6866;}{\info
|
||||||
|
{\title Audiobook Maker - Changelog}{\author Kim}{\operator Kim}{\creatim\yr2011\mo9\dy23\hr22\min51}{\revtim\yr2011\mo9\dy23\hr22\min53}{\version1}{\edmins2}{\nofpages2}{\nofwords350}{\nofchars2000}{\*\company Deutsches Elektronen-Synchrotron DESY}
|
||||||
|
{\nofcharsws2346}{\vern16393}{\*\password 00000000}}{\*\xmlnstbl }\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0
|
||||||
|
\widowctrl\ftnbj\aenddoc\grfdocevents0\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1
|
||||||
|
\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot2246780 \fet0
|
||||||
|
{\*\wgrffmtfilter 013f}\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3
|
||||||
|
\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
|
||||||
|
{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain
|
||||||
|
\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid2246780 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\fs28\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780
|
||||||
|
Audiobook Maker - Changelog
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.0 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Das Layout wurde komplett \'dcberarbeitet
|
||||||
|
\par -Der Audiobook Maker kopiert nun selbstst\'e4ndig die Dateien in einen Ordner
|
||||||
|
\par -Einzelne Kapitel k\'f6nnen nun umbenannt werden
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.1 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Kapitelprofile k\'f6nnen nun angewendet werden um die Kapitel gleichzeitig umzubenennen
|
||||||
|
\par -Die Menuleiste wurde hinzugef\'fcgt
|
||||||
|
\par -Der "H\'f6rbuch erstellen" Button ist nun nur verf\'fcgbar, wenn im Zielordner eine .POD Datei mit eingegebenem Namen vorhanden ist
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.2 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Ein integrierter Editor f\'fcr Kapitelprofile wurde hinzugef\'fcgt
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.3 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Die Geschwindigkeit zum Kopieren der Dateien wurde stark erh\'f6ht
|
||||||
|
\par -Die Tags des H\'f6rbuches k\'f6nnen bearbeitet werden
|
||||||
|
\par -Das Cover muss nicht mehr angegeben werden
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.4 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Die Kapitel k\'f6nnen nun automatisch sortiert werden
|
||||||
|
\par -Beim Hinzuf\'fcgen von Dateien wird der zuletzt aufgerufene Ordner beim folgenden Mal als Startordner benutzt
|
||||||
|
\par -Beim Hinzuf\'fcgen von Dateien k\'f6nnen nun sowohl Dateien als auch Ordner ausgew\'e4hlt werden
|
||||||
|
\par -Wenn ein Verzeichnis hinzugef\'fcgt wird, werden nun alle passenden Dateien im Ordner und allen Unterordnern hinzugef\'fcgt
|
||||||
|
\par -Es besteht die M\'f6glichkeit, einige der Tags aus den Kapiteldateien auszulesen und als Kapitelnamen zu verwenden
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.5 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Beim manuellen umbenennen der Kapitel muss nun nicht mehr best\'e4tigt werden
|
||||||
|
\par -Beim Anwenden eines Kapitelprofils wurde der Startordner ge\'e4ndert
|
||||||
|
\par -Beim Anwenden eines Kapitelprofils werden nun alle Kapitel ver\'e4ndert, wenn keins ausgew\'e4hlt ist
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.6 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Vorschau f\'fcr Kapitelprofile hinzugef\'fcgt
|
||||||
|
\par -Kapitelprofil Editor hat einige neue Funktionen
|
||||||
|
\par -Kapitelprofil Editor wurde verbessert
|
||||||
|
\par -Dateien k\'f6nnen nun automatisch nach Erstellen des H\'f6rbuchs gel\'f6scht werden
|
||||||
|
\par -Einige neue Profile wurden hinzugef\'fcgt
|
||||||
|
\par -Drag-and-Drop Unterst\'fctzung wurde hinzugef\'fcgt
|
||||||
|
\par -Sonderzeichen werden aus Dateinamen entfernt, da SSA diese Zeichen nicht unterst\'fctzt
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.7 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -POD Dateien k\'f6nnen jetzt geladen werden
|
||||||
|
\par -Es wir jetzt beim Verlassen nach dem Erstellen einer POD Datei gefragt
|
||||||
|
\par -Dateien, die nur aus Sonderzeichen bestehen, werden nun nicht mehr gel\'f6scht
|
||||||
|
\par -Die Metadata in der POD Datei wird nun nur in die Datei geschrieben, wenn mindestens ein Eintrag genutzt wird
|
||||||
|
\par
|
||||||
|
\par }{\b\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 Version 2.8 Beta
|
||||||
|
\par }{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780 -Es k\'f6nnen nun mehrere Dateien in der Liste gleichzeitig verschoben werden
|
||||||
|
\par -Drag-and-Drop Unterst\'fctzung f\'fcr POD Dateien hinzugef\'fcgt}{\lang1031\langfe1033\langnp1031\insrsid2246780\charrsid2246780
|
||||||
|
\par }}
|
||||||
50
exec/changelog.txt
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
Audiobook Maker - Changelog
|
||||||
|
|
||||||
|
Version 2.0 Beta
|
||||||
|
-Das Layout wurde komplett Überarbeitet
|
||||||
|
-Der Audiobook Maker kopiert nun selbstständig die Dateien in einen Ordner
|
||||||
|
-Einzelne Kapitel können nun umbenannt werden
|
||||||
|
|
||||||
|
Version 2.1 Beta
|
||||||
|
-Kapitelprofile können nun angewendet werden um die Kapitel gleichzeitig umzubenennen
|
||||||
|
-Die Menuleiste wurde hinzugefügt
|
||||||
|
-Der "Hörbuch erstellen" Button ist nun nur verfügbar, wenn im Zielordner eine .POD Datei mit eingegebenem Namen vorhanden ist
|
||||||
|
|
||||||
|
Version 2.2 Beta
|
||||||
|
-Ein integrierter Editor für Kapitelprofile wurde hinzugefügt
|
||||||
|
|
||||||
|
Version 2.3 Beta
|
||||||
|
-Die Geschwindigkeit zum Kopieren der Dateien wurde stark erhöht
|
||||||
|
-Die Tags des Hörbuches können bearbeitet werden
|
||||||
|
-Das Cover muss nicht mehr angegeben werden
|
||||||
|
|
||||||
|
Version 2.4 Beta
|
||||||
|
-Die Kapitel können nun automatisch sortiert werden
|
||||||
|
-Beim Hinzufügen von Dateien wird der zuletzt aufgerufene Ordner beim folgenden Mal als Startordner benutzt
|
||||||
|
-Beim Hinzufügen von Dateien können nun sowohl Dateien als auch Ordner ausgewählt werden
|
||||||
|
-Wenn ein Verzeichnis hinzugefügt wird, werden nun alle passenden Dateien im Ordner und allen Unterordnern hinzugefügt
|
||||||
|
-Es besteht die Möglichkeit, einige der Tags aus den Kapiteldateien auszulesen und als Kapitelnamen zu verwenden
|
||||||
|
|
||||||
|
Version 2.5 Beta
|
||||||
|
-Beim manuellen umbenennen der Kapitel muss nun nicht mehr bestätigt werden
|
||||||
|
-Beim Anwenden eines Kapitelprofils wurde der Startordner geändert
|
||||||
|
-Beim Anwenden eines Kapitelprofils werden nun alle Kapitel verändert, wenn keins ausgewählt ist
|
||||||
|
|
||||||
|
Version 2.6 Beta
|
||||||
|
-Vorschau für Kapitelprofile hinzugefügt
|
||||||
|
-Kapitelprofil Editor hat einige neue Funktionen
|
||||||
|
-Kapitelprofil Editor wurde verbessert
|
||||||
|
-Dateien können nun automatisch nach Erstellen des Hörbuchs gelöscht werden
|
||||||
|
-Einige neue Profile wurden hinzugefügt
|
||||||
|
-Drag-and-Drop Unterstützung wurde hinzugefügt
|
||||||
|
-Sonderzeichen werden aus Dateinamen entfernt, da SSA diese Zeichen nicht unterstützt
|
||||||
|
|
||||||
|
Version 2.7 Beta
|
||||||
|
-POD Dateien können jetzt geladen werden
|
||||||
|
-Es wir jetzt beim Verlassen nach dem Erstellen einer POD Datei gefragt
|
||||||
|
-Dateien, die nur aus Sonderzeichen bestehen, werden nun nicht mehr gelöscht
|
||||||
|
-Die Metadata in der POD Datei wird nun nur in die Datei geschrieben, wenn mindestens ein Eintrag genutzt wird
|
||||||
|
|
||||||
|
Version 2.8 Beta
|
||||||
|
-Es können nun mehrere Dateien in der Liste gleichzeitig verschoben werden
|
||||||
|
-Drag-and-Drop Unterstützung für POD Dateien hinzugefügt
|
||||||
BIN
exec/lib/jaudiotagger-2.0.1.jar
Executable file
BIN
exec/lib/myLibrary.jar
Executable file
BIN
exec/lib/swing-layout-1.0.4.jar
Executable file
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 191 KiB |
|
Before Width: | Height: | Size: 131 KiB |
@@ -1,170 +0,0 @@
|
|||||||
[Podcast]
|
|
||||||
|
|
||||||
altfolder1=Vollidiot
|
|
||||||
basename=Vollidiot
|
|
||||||
audiobook=true
|
|
||||||
artwork=Vollidiot.png
|
|
||||||
imgwidth=300
|
|
||||||
imgheight=300
|
|
||||||
editpointcount=22
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_1]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-01 Intro.m4a
|
|
||||||
chapter=001
|
|
||||||
start=00:00:00.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_2]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-02 Macadamia Nudge Matsch.m4a
|
|
||||||
chapter=002
|
|
||||||
start=00:00:45.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_3]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-03 Der Saftschubser-Gentleman.m4a
|
|
||||||
chapter=003
|
|
||||||
start=00:18:36.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_4]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-04 Danke, WMF!.m4a
|
|
||||||
chapter=004
|
|
||||||
start=00:38:37.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_5]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-05 Lala.m4a
|
|
||||||
chapter=005
|
|
||||||
start=00:55:59.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_6]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-06 Die Halslose Killerschwuchtel.m4a
|
|
||||||
chapter=006
|
|
||||||
start=01:03:31.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_7]
|
|
||||||
image=Vollidiot.png
|
|
||||||
audiofile=1-07 Josef-Stalin-Charme-Schule.m4a
|
|
||||||
chapter=007
|
|
||||||
start=01:09:38.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_8]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=008
|
|
||||||
audiofile=2-01 Die Rote Eule Fraktion.m4a
|
|
||||||
start=01:19:38.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_9]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=009
|
|
||||||
audiofile=2-02 Schicklgruber.m4a
|
|
||||||
start=01:30:52.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_10]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=010
|
|
||||||
audiofile=2-03 Tall Latte Macchiato Armagheddo.m4a
|
|
||||||
start=01:41:11.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_11]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=011
|
|
||||||
audiofile=2-04 Paula.m4a
|
|
||||||
start=01:52:12.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_12]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=012
|
|
||||||
audiofile=2-05 Der Shrimpsdöner.m4a
|
|
||||||
start=02:00:34.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_13]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=013
|
|
||||||
audiofile=2-06 Tag Am Meer.m4a
|
|
||||||
start=02:09:56.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_14]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=014
|
|
||||||
audiofile=2-07 Der Paula-Plan.m4a
|
|
||||||
start=02:19:47.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_15]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=015
|
|
||||||
audiofile=2-08 _Soy JulianComotellamas_.m4a
|
|
||||||
start=02:26:06.00
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_16]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=016
|
|
||||||
audiofile=3-01 Krebsrote Flachpfeife.m4a
|
|
||||||
start=02:39:00.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_17]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=017
|
|
||||||
audiofile=3-02 Nacht Am Meer.m4a
|
|
||||||
start=02:53:40.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_18]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=018
|
|
||||||
audiofile=3-03 Im Separee Der Horizontalen Ver.m4a
|
|
||||||
start=03:10:38.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_19]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=019
|
|
||||||
audiofile=3-04 Wenn Sie Eine Zitrone Haben.m4a
|
|
||||||
start=03:22:42.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_20]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=020
|
|
||||||
audiofile=3-05 Die Glühwürmchenseilbahn.m4a
|
|
||||||
start=03:34:06.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_21]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=021
|
|
||||||
audiofile=3-06 Vollidiot.m4a
|
|
||||||
start=03:43:37.00
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_22]
|
|
||||||
image=Vollidiot.png
|
|
||||||
chapter=022
|
|
||||||
audiofile=3-07 Das Gurkenrennen.m4a
|
|
||||||
start=03:48:03.00
|
|
||||||
|
Before Width: | Height: | Size: 172 KiB |
|
Before Width: | Height: | Size: 251 KiB |
@@ -1,19 +0,0 @@
|
|||||||
<h1>Wo speichert iTunes meine Songs???</h1>
|
|
||||||
|
|
||||||
Wenn sie sich diese Frage schon öfters gestellt haben, ist dies genau die richtige Anleitung.<p />
|
|
||||||
Wenn sie iTunes geöffnet haben, klicken sie auf Bearbeiten >> Einstellungen:<br>
|
|
||||||
<img src="Settings.jpg" alt="Settings.jpg"></img><p />
|
|
||||||
|
|
||||||
Es sollte sich dieses Fenster öffnen(Die Haken können auch anders gesetzt sein):<br>
|
|
||||||
<img src="Set_Win.jpg" alt="Set_Win.jpg"></img><p />
|
|
||||||
|
|
||||||
Dort klicken sie jetzt auf den Tab <i>Erweitert</i>:<br>
|
|
||||||
<img src="Tab_Adv.jpg" alt="Tab_Adv.jpg"></img><p />
|
|
||||||
|
|
||||||
Dort gibt es nun oben ein Feld, in dem der Pfad des iTunes Medienordners steht. Mit dem Button <i>Ändern</i> kann dieser beliebig geändert werden.(rote Rahmen)<br>
|
|
||||||
<img src="change.jpg" alt="change.jpg"></img><p />
|
|
||||||
|
|
||||||
Wenn sie den dort angegebenen Pfad im Windows-Explorer öffnen, finden sie dort standartmässig Ordner, die nach den Interpreten benannt sind(und ein paar standart iTunes-Ordner wie z.B.<i> Mobile Applications</i>). Unter dem gewünschten Interpretennamen finden sie seine Alben als Ordner vor, in welchen wiederum die Titel liegen.<br>
|
|
||||||
Es kann sein, dass sie ihren gewünschten Interpreten nicht finden: <ol><li>Falls es ein Interpret sein sollte, den sie nicht über den iTunes store oder eine CD importiert haben, sollten sie gucken, ob der Haken "beim Hinzufügen in den Medienordner kopieren" angewählt ist(letztes Bild, blauer Rahmen). Ist er das nicht, so liegen die Dateien in dem Ordner auf den Sie sie(z.B. vom USB-Stick)kopiert haben. Falls doch siehe 2.
|
|
||||||
<li>Sehen sie in den Unterordnern <i>Music, Compilations</i> und <i>Music/Compilations</i>(fragen Sie mich nicht nach dem Ordnungssystem )des iTunes Medienordners nach, ob die Interpreten(evtl. gleich die Alben) dort als Ordner vorliegen.
|
|
||||||
</ol>
|
|
||||||
|
Before Width: | Height: | Size: 327 KiB |
|
Before Width: | Height: | Size: 254 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 159 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 240 KiB |
|
Before Width: | Height: | Size: 149 KiB |
BIN
src/Data/pod.jpg
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 184 KiB |
@@ -1,106 +0,0 @@
|
|||||||
package Dating;
|
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
public class Time {
|
|
||||||
private int hours = 0;
|
|
||||||
private int minutes = 0;
|
|
||||||
private int seconds = 0;
|
|
||||||
|
|
||||||
public Time() {}
|
|
||||||
|
|
||||||
public Time(int hours, int minutes, int seconds) {
|
|
||||||
this.add(hours, minutes, seconds);
|
|
||||||
|
|
||||||
|
|
||||||
/*this.hours = hours;
|
|
||||||
this.minutes = minutes;
|
|
||||||
this.seconds = seconds;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
public void add(Time t) {
|
|
||||||
add(t.getHours(), t.getMinutes(), t.getSeconds());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void add(int hours, int minutes, int seconds) {
|
|
||||||
this.seconds = this.seconds + seconds;
|
|
||||||
this.minutes = this.minutes + minutes;
|
|
||||||
this.hours = this.hours + hours;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
|
|
||||||
if (this.seconds >= 60) {
|
|
||||||
this.minutes++;
|
|
||||||
this.seconds = this.seconds - 60;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
|
|
||||||
if (this.minutes >= 60) {
|
|
||||||
this.hours++;
|
|
||||||
this.minutes = this.minutes - 60;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String asString() {
|
|
||||||
String returnS;
|
|
||||||
|
|
||||||
if (hours < 10) {
|
|
||||||
returnS = "0" + hours;
|
|
||||||
} else {
|
|
||||||
returnS = "" + hours;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (minutes < 10) {
|
|
||||||
returnS = returnS + ":0" + minutes;
|
|
||||||
} else {
|
|
||||||
returnS = returnS + ":" + minutes;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (seconds < 10) {
|
|
||||||
returnS = returnS + ":0" + seconds;
|
|
||||||
} else {
|
|
||||||
returnS = returnS + ":" + seconds;
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getHours() {
|
|
||||||
return hours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getMinutes() {
|
|
||||||
return minutes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSeconds() {
|
|
||||||
return seconds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHours(int hours) {
|
|
||||||
this.hours = hours;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinutes(int minutes) {
|
|
||||||
this.minutes = minutes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSeconds(int seconds) {
|
|
||||||
this.seconds = seconds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package Exceptions;
|
|
||||||
|
|
||||||
public class EndingException extends Exception {
|
|
||||||
public EndingException() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public EndingException(String s) {
|
|
||||||
super(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package Exceptions;
|
|
||||||
|
|
||||||
public class FolderException extends Throwable {
|
|
||||||
public FolderException() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public FolderException(String s) {
|
|
||||||
super(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package Exceptions;
|
|
||||||
|
|
||||||
public class NoFilesSelectedException extends NotSelectedException {
|
|
||||||
|
|
||||||
public NoFilesSelectedException(){
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
public NoFilesSelectedException(String message){
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package Exceptions;
|
|
||||||
|
|
||||||
|
|
||||||
public class NoFolderSelectedException extends NotSelectedException {
|
|
||||||
|
|
||||||
public NoFolderSelectedException() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
public NoFolderSelectedException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package Exceptions;
|
|
||||||
|
|
||||||
public class NotSelectedException extends Exception {
|
|
||||||
|
|
||||||
public NotSelectedException(){
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
public NotSelectedException(String message){
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
package LAF;
|
|
||||||
|
|
||||||
|
|
||||||
public class LAF {
|
|
||||||
public static final String Windows = "Windows";
|
|
||||||
public static final String Mac = "Nimbus";
|
|
||||||
public static final String Nimbus = "Nimbus";
|
|
||||||
public static final String Motif = "Motif";
|
|
||||||
public static final String Metal = "Metal";
|
|
||||||
public static void LAFUpdate(java.awt.Component[] components){
|
|
||||||
int NumberOfComponents = components.length;
|
|
||||||
int i;
|
|
||||||
for (i = 0; i<NumberOfComponents; i++){
|
|
||||||
javax.swing.SwingUtilities.updateComponentTreeUI(components[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
public static void LAFUpdate(java.awt.Component[] components, String lookAndFeel){
|
|
||||||
if (lookAndFeel.equals("Windows")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Motif")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Nimbus")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Metal")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
|
|
||||||
int NumberOfComponents = components.length;
|
|
||||||
int i;
|
|
||||||
for (i = 0; i<NumberOfComponents; i++){
|
|
||||||
javax.swing.SwingUtilities.updateComponentTreeUI(components[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public static void LAFUpdate(java.awt.Component component, String lookAndFeel){
|
|
||||||
if (lookAndFeel.equals("Windows")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Motif")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Nimbus")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Metal")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
|
|
||||||
javax.swing.SwingUtilities.updateComponentTreeUI(component);
|
|
||||||
}
|
|
||||||
public static void setLAF(String lookAndFeel){
|
|
||||||
if (lookAndFeel.equals("Windows")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Motif")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Nimbus")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
if (lookAndFeel.equals("Metal")){
|
|
||||||
try {javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");}
|
|
||||||
catch(Exception e){}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
152
src/Readme.html
@@ -1,152 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>audiobook Maker Tutorial</title>
|
|
||||||
Der Ordner Data entält die Bilddateien der Readme.
|
|
||||||
</head>
|
|
||||||
<body style="background-color: #CCFFFF;">
|
|
||||||
<h2>Achtung:</h2>
|
|
||||||
Gegebenenfalls muss man Administrator sein um alle Teile des Tutorials befolgen zu können, da z.B. SSA standartmäßig in das Programmverzeichnis(bei mir "C:\Programme\", oder "C:\Program Files\") installiert wird.<p />
|
|
||||||
|
|
||||||
<h1 id="top">iPod Audiobook Maker Tutorial</h1><p />
|
|
||||||
<h2>Inhalt</h2><p />
|
|
||||||
<ol>
|
|
||||||
<li><a href="#install">Installation</a></li>
|
|
||||||
<li><a href="#general" title="Wofür der iPod audiobook Maker gemacht wurde">Allgemeines</a></li>
|
|
||||||
<li><a href="#tutorial">Tutorial</a></li>
|
|
||||||
<li><a href="#PodData">Aufbau einer .POD Datei</a></li>
|
|
||||||
<li><a href="#source">Quellen</a></li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="install">1. Installation</h2>
|
|
||||||
<ol>
|
|
||||||
<li>Da der <i>iPod audiobook Maker</i> in Java geschrieben ist, ist es notwendig Java zu installieren(<a href="http://java.com/de/download/manual.jsp" target="_blank">download</a>)
|
|
||||||
<li>Um den <i>iPod audiobook Maker</i> zu benutzen müssen sie zuerst den <i><b>S</b>lide<b>s</b>how <b>A</b>ssembler(kurz: SSA)</i> installieren.(<a href="#general"><small>Warum</small></a>)
|
|
||||||
<li>Führen sie dazu die ssa_setup105a.exe aus und befolgen sie die Anweisungen.(Alternativ auch der originale <a href="http://www.jrlearnsmedia.com/blog/articles/ssa-downloads.aspx" target="_blank">Download</a> von Jr Learns Media(Sie brauchen SSA und <b>nicht</b> SSAFront))
|
|
||||||
<li>Verschieben sie nun die audiobook Maker.jar in das Programmverzeichnis von SSA(Bei mir ist das C:\Programme\Slideshow Assambler\)<small><a href="Data/source.jpg">Bild</a></small>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<h2 id="general">2. Allgemeines</h2>
|
|
||||||
Haben Sie schon mal ein Hörbuch vom iTunes-Sore mit einer gerippten Hörbuch-CD verglichen? Der Unterschied dürfte sofort auffallen:
|
|
||||||
Das iTunes-Hörbuch besteht aus einer Datei mit schön gesetzten Kapiteln, während das CD-Hörbuch aus vielen einzelnen Dateien besteht.
|
|
||||||
Aber es gibt Möglichkeiten Diese Dateien zu einem iTunes-Hörbuch zu machen. Und um das zu erleichtern habe ich den <i>iPod audiobook Maker</i> geschrieben.
|
|
||||||
Der Name audiobook Maker ist eigentlich nicht ganz richtig, da das Programm nur eine <a href="#PodData">.POD Datei</a> erstellt, und keine .m4b(iTunes Hörbuch) Datei.
|
|
||||||
Diese <a href="#PodData">.POD Datei</a> kann nun allerdings durch <i>SSA</i> ausgewertetwerden, wodurch eine m4b Datei erstellt wird.<p />
|
|
||||||
Generell ist der <i>iPod audiobook Maker</i> dafür gedacht das mühsame Schreiben der Startzeiten in der <a href="#PodData">.POD Datei </a>
|
|
||||||
zu erleichtern, allerdings soll das Programm noch komfortabler werden und auch das Hörbuch direkt erstellen.<br />
|
|
||||||
Das Programm ist in Java geschrieben, was bedeutet, dass es auch auf anderen Plattformen laufen sollte. Allerdings weiß ich dort nichts über die Handhabung von iTunes und glaube nicht, dass SSA für andere Systeme verfügbar ist. Deshalb ist dieses Tutorial vor allem für Windows-Benutzer<p />
|
|
||||||
<small><a href="#top">Start</a></small><p /><p />
|
|
||||||
|
|
||||||
|
|
||||||
<h2 id="tutorial">3. Tutorial(Beispiel: Tommy Jaud-Vollidiot)</h2>
|
|
||||||
<ol>
|
|
||||||
<li><a href="#rip">Schritt 1: Rippen der CD</a></li>
|
|
||||||
<li><a href="#move">Schritt 2: Vorbereiten der Dateien</a></li>
|
|
||||||
<li><a href="#audioBMaker">Schritt 3: Benutzung des iPod audiobook Makers</a></li>
|
|
||||||
<li><a href="#useSSA">Schritt 4: SSA Benutzen</a></li>
|
|
||||||
<li><a href="#clean">Schritt 5: Aufräumen</a></li>
|
|
||||||
</ol>
|
|
||||||
Hier ein ausführliches Tutorial wie dieses Programm benutzt wird:<p />
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="rip">Schritt 1: Rippen der CD</h3>
|
|
||||||
Als erstes müssen sie die Audiodateien(am besten über iTunes) auf den PC rippen. Allerdings sollten sie vorher sicher stellen, dass die Dateien dann auch als m4a Dateien vorliegen und nicht als mp3s oder anderes.
|
|
||||||
Das tun sie, indem sie auf Importeinstellungen klicken:<br />
|
|
||||||
<a href="Data/importSettings.jpg"><img src="Data/importSettings.jpg" alt="Data/importSettings.jpg" width="700" height="550"></a><p />
|
|
||||||
Dann sollte sich so ein Fenster öffnen. Dabei sollte vor allem die markierte Einstellung auf <i>AAC</i> stehen. Den Rest müssen sie selber
|
|
||||||
je nach PC einstellen:<br />
|
|
||||||
<a href="Data/importSettings2.jpg"><img src="Data/importSettings2.jpg" alt="Data/importSettings2.jpg"></a><p />
|
|
||||||
Danach können sie CD importieren.<br />
|
|
||||||
<small><a href="#tutorial">Tutorial</a></small><br />
|
|
||||||
<small><a href="#top">Start</a></small><p />
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="move">Schritt 2: Vorbereiten der Dateien</h3>
|
|
||||||
Jetzt sollen die Hörbuch Dateien in einen Unterordner des Programm-Verzeichnises von SSA verschoben werden(Namen merken). Das können Sie, indem sie die entsprechenden Dateien in iTunes markieren und per drag-and-drop in das Verzeichnis kopieren:<br />
|
|
||||||
<a href="Data/drag-and-drop.jpg"><img src="Data/drag-and-drop.jpg" alt="Data/drag-and-drop.jpg" width="700" height="550"></a><p />
|
|
||||||
Alternativ dazu, können die Dateien auch diereckt über den Windows-Explorer kopiert oder verschoben werden.<br />
|
|
||||||
Wie sie den\die Ordner finden, wo iTunes die Dateien abspeichert können sie hier sehen(<a href="Data/iTunes Data.html" target="_blank">Link</a>);
|
|
||||||
Falls Sie noch ein CD-Cover hinzufügen wollen, kopieren oder verschieben sie die Bilddatei in den selben Unterordner von SSA, wie die Musikdateien.<br />
|
|
||||||
<small><a href="#tutorial">Tutorial</a></small><br />
|
|
||||||
<small><a href="#top">Start</a></small><p />
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="audioBMaker">Schritt 3: Benutzung des iPod audiobook Makers</h3>
|
|
||||||
der audiobook Maker erstellt in einem anzugebenden Verzeichnis die Datei <i>Podcast.POD</i>. Sie können diese Datei nach belieben umbenennen(die Endung .POD muss erhalten bleiben)<p />
|
|
||||||
|
|
||||||
Als erstes führen sie die Datei <i>audiobook Maker.jar</i> aus(Doppelklick oder manuell mit Konsole(Zum Verzeichnis navigieren und den Befehl "java -jar [meineJarDatei.jar]" eingeben). Es sollte sich dieses Fenster öffnen(Falls .jar-Dateien mit eienem externen Programm(z.B. WinRAR) geöffnet werden sollten, müssen sie in den jeweiligen Programmeinstellungen die Dateiendung *.jar für das Programm deaktivieren.):<br />
|
|
||||||
<img alt="Data/main.jpg" src="Data/main.jpg" ><p />
|
|
||||||
|
|
||||||
Der Button <b>Ordner</b> fordert sie dazu auf den Namen des Ordners anzugeben in den sie die Dateien aus Schritt 2 anzugeben.<p />
|
|
||||||
Der Button <b>Cover auswählen</b> fordert sie dazu auf den Namen der Bilddatei(Schritt 2) die das Cover werden soll und im angegebenen Ordner sollte anzugeben.<p />
|
|
||||||
Der Button <b>.POD Datei erstellen</b> erstellt logischerweise die .POD Datei im angegebenen Ordner.<p />
|
|
||||||
Die drei <b>Ausahlknöpfe</b> lassen sie wählen, wie die einzelnen Kapitel genannt werden sollen(<small><a href="Data/names.jpg">Bild zu <b>Kapitel durchnummerieren</b></a></small>).<p />
|
|
||||||
<u>Die Dateien werden in Alphabetischer Reihnfolge zum Hörbuch zusammengefasst.</u><p />
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="useSSA">Schritt 4: SSA benutzen</h3>
|
|
||||||
Jetzt kommt der letzte Schritt zum Hörbuch. Dazu müssen sie nur die erstellte .POD Datei auf SSA.exe ziehen. Es sollte sich ein Fenster öffnen:<br />
|
|
||||||
<img src="Data/SSA.exe.jpg" alt="Data/SSA.exe.jpg"><p />
|
|
||||||
|
|
||||||
Danach sollte eine Auflistung der Dateien kommen, die in den <a href="#editpoint">Editpoints</a> angegeben sind.<br />
|
|
||||||
<img src="Data/list.jpg" alt="Data/list.jpg"><p />
|
|
||||||
|
|
||||||
Als letztes werden sie zum Warten aufgefordert, während die m4b Datei erstellt wird(bei mir hat sich das Fenster automatisch geschlosen, als dei !-Zeichen in der Mitte der zweiten Zeile waren.).<br />
|
|
||||||
<img src="Data/output.jpg" alt="Data/output.jpg"><br />
|
|
||||||
<small><a href="#tutorial">Tutorial</a></small><br />
|
|
||||||
<small><a href="#top">Start</a></small><p />
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="clean">Schritt 5: Aufräumen(optional)</h3>
|
|
||||||
Als letzten Schritt empfehle ich, die CD-Dateien aus der iTunes-Mediathek zu löschen, da sie diese nun in einem Hörbuch haban.
|
|
||||||
Dieses importieren sie in iTunes , indem sie es per drag-and-drop in die iTunes-Mediathek ziehen(falls sie im folgenden die importierte .m4b datei verschieben/löschen gibt iTunes beim Abspielen eine Fehlermeldung aus, dass die Originaldatei nicht gefunden wurde. Über den Button <i>Suchen</i> können sie den Pfad zur Datei neu belegen.<a href="Data/search.jpg"><small>Bild</small></a>).<br />
|
|
||||||
<a href="Data/import.jpg"><img src="Data/import.jpg" alt="Data/import.jpg" width="700" height="550"></a><br />
|
|
||||||
Sie können nun über den Windows-Explorer auch die Quelldateien, die Sie von der CD importiert haben löschen, da diese nun nicht mehr gebraucht werden.(<a href="Data/iTunes Data.html" target="_blank">Wo speichert iTunes mein Dateien</a>)
|
|
||||||
<small><a href="#tutorial">Tutorial</a></small><br />
|
|
||||||
<small><a href="#top">Start</a></small><p />
|
|
||||||
|
|
||||||
<h2 id="PodData">4. Aufbau einer .POD Datei</h2>
|
|
||||||
|
|
||||||
Hier Noch mal eine kurze Erklärung, wie eine <a href="#PodData">.POD Datei</a> aufgebaut ist, damit sie auch nachträglich Änderungen vornehmen können.<br />
|
|
||||||
Wenn Sie eine .POD Datei in einem Editor (Notepad(++), Editor, ...) öffnen, können sie folgendes finden(hinter den =Zeichen sollte irgentetwas stehen, was den entsprechenden Punkt belegt):<br />
|
|
||||||
<img src="Data/pod.jpg" alt="Data/pod.jpg"><p />
|
|
||||||
|
|
||||||
[Podcast]<br />
|
|
||||||
dies ist die Startzeile (Da SSA eigentlich nicht für Hörbücher gemacht wurde, sondern für Podcasts, tricksen wir einfach ein bisschen.)<p />
|
|
||||||
|
|
||||||
altfolder1<br />
|
|
||||||
ist der Name des Ordners, in dem sich die Audiodateien und evtl. das Cover befinden(von SSA.exe aus gesehen).<p />
|
|
||||||
|
|
||||||
basename<br />
|
|
||||||
ist der Name des Ausgabeordners(von SSA.exe aus gesehen).<p />
|
|
||||||
|
|
||||||
artwork<br />
|
|
||||||
ist der Name der Bilddatei, die als Cover verwendet werden soll(im angegebenen Ordner)<p />
|
|
||||||
|
|
||||||
imgwidth und imgheight<br />
|
|
||||||
sind die Maße des Bildes(imgwidth=Breite, imgheight=Höhe)<p />
|
|
||||||
|
|
||||||
editpointcount<br />
|
|
||||||
ist eine Angabe der Anzahl der <a href="#editpoint">Editpoints</a><p /><br />
|
|
||||||
|
|
||||||
|
|
||||||
[Editpoint_[Zahl]]<br id="editpoint">
|
|
||||||
ist eine angabe, bei welchem Editpoint man sich befindet(ein Editpoint gibt Auskunft über eine Datei)<p />
|
|
||||||
|
|
||||||
image<br />
|
|
||||||
ist der Name der Bilddatei für das Kapitel dieses Editpoints(Jedes Kapitel kann also ein eigenes Cover haben)<p />
|
|
||||||
|
|
||||||
audiofile<br />
|
|
||||||
ist der Name der Datei des Editpoints<p />
|
|
||||||
|
|
||||||
chapter<br />
|
|
||||||
ist der Name, der bei der Kapitelauswahl angezeigt wird(<a href="Data/names.jpg"><small>Bild</small></a>)<p />
|
|
||||||
|
|
||||||
start<br />
|
|
||||||
ist eine Angabe, wann das Kapitel beginnt(Format: hh:mm:ss,ff (h=Stunden, m=Minuten, s=Sekunden, f=Frames)), wobei die Frames sowieso ignoriert werden.<p />
|
|
||||||
<a href="Data/Vollidiot.txt" target="_blank">Ein komplettes Beispiel</a><br />
|
|
||||||
<small><a href="#top">Start</a></small><p />
|
|
||||||
|
|
||||||
<h2 id="source">5. Quellen</h2>
|
|
||||||
<a href="http://www.jrlearnsmedia.com/blog/articles/ssa-downloads.aspx" target="_blank">Slideshow Assembler von Jr Learns Media</a><br />
|
|
||||||
<a href="http://www.jthink.net/jaudiotagger/" target="_blank">m4a-codec (JThink's JAudiotagger)</a><br />
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,356 +0,0 @@
|
|||||||
//~--- non-JDK imports --------------------------------------------------------
|
|
||||||
|
|
||||||
import Dating.Time;
|
|
||||||
|
|
||||||
import Exceptions.*;
|
|
||||||
|
|
||||||
import LAF.LAF;
|
|
||||||
|
|
||||||
//Imports für m4a-Codec
|
|
||||||
import org.jaudiotagger.audio.*;
|
|
||||||
import org.jaudiotagger.audio.exceptions.*;
|
|
||||||
import org.jaudiotagger.tag.*;
|
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
import java.awt.image.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
import javax.imageio.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
public class audiobook extends JFrame implements ActionListener {
|
|
||||||
|
|
||||||
// Componenten deklarieren
|
|
||||||
private static Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
|
||||||
static audiobook maker;
|
|
||||||
private boolean hasImage = false;
|
|
||||||
private Time time = new Time(0, 0, 0);
|
|
||||||
private BufferedImage Cover;
|
|
||||||
private String CoverName;
|
|
||||||
private JPanel buttonPanel;
|
|
||||||
private ButtonGroup chapterGroup;
|
|
||||||
private JButton chooseImage;
|
|
||||||
private JButton create;
|
|
||||||
private File[] files;
|
|
||||||
private JButton output;
|
|
||||||
private String outputFolder;
|
|
||||||
private JLabel selectedFolder;
|
|
||||||
private JLabel selectedImage;
|
|
||||||
private JRadioButton typeSelf;
|
|
||||||
private JRadioButton useFilenames;
|
|
||||||
private JRadioButton useNumbers;
|
|
||||||
|
|
||||||
// Konstruktor
|
|
||||||
public audiobook() {
|
|
||||||
this("iPod Audiobook Maker");
|
|
||||||
}
|
|
||||||
|
|
||||||
public audiobook(String s) {
|
|
||||||
super(s);
|
|
||||||
initComponents();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initComponents() {
|
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
this.setIconImage(new ImageIcon(this.getClass().getResource("/Data\\icon.gif")).getImage());
|
|
||||||
setLayout(new FlowLayout());
|
|
||||||
|
|
||||||
// labelPanel zeigt ausgewählten Ordner und Cover an
|
|
||||||
JPanel labelPanel = new JPanel(new FlowLayout());
|
|
||||||
|
|
||||||
selectedFolder = new JLabel("Ordner: <Keiner> -");
|
|
||||||
selectedImage = new JLabel("Cover: <Keins>");
|
|
||||||
labelPanel.add(selectedFolder);
|
|
||||||
labelPanel.add(selectedImage);
|
|
||||||
|
|
||||||
// Das buttonPanel ist das Panel in dem alle Komponenten angezeigt werden
|
|
||||||
buttonPanel = new JPanel(new GridLayout(0, 1));
|
|
||||||
chooseImage = new JButton("Cover auswählen");
|
|
||||||
output = new JButton("Ordner");
|
|
||||||
create = new JButton(".POD Datei erstellen");
|
|
||||||
chapterGroup = new ButtonGroup();
|
|
||||||
|
|
||||||
// Die Radiobuttons um die Art der Kapitelbezeichnung zu wählen
|
|
||||||
useNumbers = new JRadioButton("Kapitel durchnummerieren", true);
|
|
||||||
useFilenames = new JRadioButton("Dateinamen als Kapitelnamen verwenden", false);
|
|
||||||
typeSelf = new JRadioButton("Kapitel selber benennen", false);
|
|
||||||
|
|
||||||
// Tooltips der Radiobuttons
|
|
||||||
output.setToolTipText(
|
|
||||||
"<html><head></head><body><b>Der Name des Unterordners im Slideshow Assembler-Verzeichnis</b>, in dem die Audiodateien liegen<br />"
|
|
||||||
+ "und in dem die .POD Datei und die .m4b Datei gespeichert werden sollen</body></html>");
|
|
||||||
chooseImage.setToolTipText("Der Name der Bilddatei im \"Ordner\", die als Cover verwendet werden soll");
|
|
||||||
useNumbers.setToolTipText("Die Namen der Kapitel werden \"001, 002, ...\" genannt");
|
|
||||||
useFilenames.setToolTipText(
|
|
||||||
"<html><head></head><body>Die Namen der Kapitel werden nach den Namen der dazugehörigen Dateien benannt.<br />"
|
|
||||||
+ "Oft werden die Namen dadurch <b>besonders lang</b>.</body></html>");
|
|
||||||
typeSelf.setToolTipText("Kapitelnamen selber angeben");
|
|
||||||
|
|
||||||
// Den Buttons ActionListener registrieren
|
|
||||||
chooseImage.addActionListener(this);
|
|
||||||
output.addActionListener(this);
|
|
||||||
create.addActionListener(this);
|
|
||||||
|
|
||||||
// Hinzufügen zur Radiobutton group
|
|
||||||
chapterGroup.add(useNumbers);
|
|
||||||
chapterGroup.add(useFilenames);
|
|
||||||
chapterGroup.add(typeSelf);
|
|
||||||
|
|
||||||
// Hinzufügen zum Buttonpanel
|
|
||||||
buttonPanel.add(labelPanel);
|
|
||||||
buttonPanel.add(output);
|
|
||||||
buttonPanel.add(chooseImage);
|
|
||||||
buttonPanel.add(create);
|
|
||||||
buttonPanel.add(useNumbers);
|
|
||||||
buttonPanel.add(useFilenames);
|
|
||||||
buttonPanel.add(typeSelf);
|
|
||||||
|
|
||||||
// Buttonpanel zum Hauptfenster hinzufügen
|
|
||||||
add(buttonPanel);
|
|
||||||
|
|
||||||
// Größe, Position, ... des Fensters einstellen
|
|
||||||
pack();
|
|
||||||
setLocation((ScreenSize.width - getWidth()) / 2, (ScreenSize.height - getHeight()) / 2);
|
|
||||||
setResizable(true);
|
|
||||||
setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
|
|
||||||
// Auswählen des Look-and-Feels
|
|
||||||
LAF.setLAF(LAF.Mac);
|
|
||||||
|
|
||||||
// Neues audiobook-Fenster erzeugen
|
|
||||||
maker = new audiobook();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
|
|
||||||
// ActionListener um den Ordner auszuwählen
|
|
||||||
if (e.getActionCommand().equals("Ordner")) {
|
|
||||||
|
|
||||||
// Input-Dialog anzeigen um den Namen einzugeben
|
|
||||||
outputFolder = JOptionPane.showInputDialog(null, "Bitte Namen des Ordners angeben", "Eingabe",
|
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
|
||||||
|
|
||||||
// Überprüfen ob der Ordner existiert
|
|
||||||
try {
|
|
||||||
File f = new File(outputFolder);
|
|
||||||
|
|
||||||
if (!f.exists() ||!f.isDirectory()) {
|
|
||||||
|
|
||||||
// Exception falls der Ordner nicht existiert
|
|
||||||
throw new FolderException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alle passenden Dateien zum files-Array hinzufügen
|
|
||||||
files = f.listFiles(new FileFilter() {
|
|
||||||
public boolean accept(File pathname) {
|
|
||||||
return pathname.getName().endsWith(".m4a");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
selectedFolder.setText("Ordner: " + outputFolder + " -");
|
|
||||||
selectedFolder.repaint();
|
|
||||||
|
|
||||||
// Abfangen der Exception falls der Ordner nicht existiert
|
|
||||||
} catch (FolderException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Ordner wurde nicht gefunden", "Fehler", JOptionPane.ERROR_MESSAGE);
|
|
||||||
outputFolder = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ActionListener um das Cover auszuwählen
|
|
||||||
if (e.getActionCommand().equals("Cover auswählen")) {
|
|
||||||
|
|
||||||
// Ausgabeordner auf Existenz überprüfen
|
|
||||||
if (outputFolder != null) {
|
|
||||||
|
|
||||||
// Input-Dialog um Dateinamen anzugeben
|
|
||||||
String s = JOptionPane.showInputDialog(null, "Bitte Namen der Bilddatei eingeben", "Eingabe",
|
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (s == null) {
|
|
||||||
|
|
||||||
// Abbruchbefehl des Dialogs behandeln
|
|
||||||
throw new IOException("go");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auf falsche Dateiendungen reagieren
|
|
||||||
if (!s.toLowerCase().endsWith(".jpg")) {
|
|
||||||
if (!s.toLowerCase().endsWith(".png")) {
|
|
||||||
throw new EndingException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Cover = ImageIO.read(new File(outputFolder + "\\" + s));
|
|
||||||
this.hasImage = true;
|
|
||||||
selectedImage.setText("Cover: " + s);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Behandeln möglicher Fehler (falsche Dateiendung, Bilddatei existiert nicht)
|
|
||||||
// Falls Abbruchbefehl gewählt wurde, keine Reaktion
|
|
||||||
catch (IOException exc) {
|
|
||||||
if (!exc.getMessage().equals("go")) {
|
|
||||||
Cover = null;
|
|
||||||
JOptionPane.showMessageDialog(null, "Bilddatei wurde nicht gefunden", "Fehler",
|
|
||||||
JOptionPane.WARNING_MESSAGE);
|
|
||||||
this.hasImage = false;
|
|
||||||
}
|
|
||||||
} catch (EndingException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Das Cover muss eine .jpg oder .png Datei sein", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
Cover = null;
|
|
||||||
this.hasImage = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Cover != null) {
|
|
||||||
this.hasImage = true;
|
|
||||||
this.CoverName = s;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
JOptionPane.showMessageDialog(null, "Bitte geben sie zuerst einen Ausgabeordner an", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Funktion um .POD Datei zu erstellen
|
|
||||||
if (e.getActionCommand().equals(".POD Datei erstellen")) {
|
|
||||||
|
|
||||||
// Cursor auf Arbeitscursor stellen
|
|
||||||
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
|
||||||
|
|
||||||
// Ordner, Cover überprüfen
|
|
||||||
try {
|
|
||||||
if (outputFolder == null) {
|
|
||||||
throw new NoFolderSelectedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasImage) {
|
|
||||||
if (JOptionPane.showConfirmDialog(null,
|
|
||||||
"Es wurde kein Cover ausgewählt.\nDatei trotzdem erstellen?",
|
|
||||||
"Kein Cover", JOptionPane.YES_OPTION) == JOptionPane.NO_OPTION) {
|
|
||||||
throw new EndingException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Zählvariable
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
FileWriter fWriter = new FileWriter(outputFolder + "\\Podcast.POD");
|
|
||||||
BufferedWriter writer = new BufferedWriter(fWriter);
|
|
||||||
|
|
||||||
// angegebene Informationen (Ordnername, Bild, Bildmaße, Dateianzahl) in die Datei schreiben
|
|
||||||
writer.write("[Podcast]\n");
|
|
||||||
writer.write("altfolder1=" + outputFolder + "\n");
|
|
||||||
writer.write("basename=" + outputFolder + "\n");
|
|
||||||
writer.write("audiobook=true" + "\n");
|
|
||||||
|
|
||||||
if (this.hasImage) {
|
|
||||||
writer.write("artwork=" + CoverName + "\n");
|
|
||||||
writer.write("imgwidth=" + Cover.getWidth() + "\n");
|
|
||||||
writer.write("imgheight=" + Cover.getHeight() + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("editpointcount=" + files.length + "\n\n\n");
|
|
||||||
|
|
||||||
// "Editpoint" für jede Musikdatei in .POD Datei schreiben
|
|
||||||
for (i = 0; i < files.length; i++) {
|
|
||||||
writer.write("[Editpoint_" + (i + 1) + "]\n");
|
|
||||||
|
|
||||||
if (this.hasImage) {
|
|
||||||
writer.write("image=" + CoverName + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("audiofile=" + files[i].getName() + "\n");
|
|
||||||
|
|
||||||
// Kapitelnamen durchnummerieren
|
|
||||||
if (useNumbers.isSelected()) {
|
|
||||||
writer.write("chapter=");
|
|
||||||
|
|
||||||
if ((i + 1) < 100) {
|
|
||||||
writer.write("0");
|
|
||||||
|
|
||||||
if ((i + 1) < 10) {
|
|
||||||
writer.write("0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write((i + 1) + "\n");
|
|
||||||
|
|
||||||
// Dateinamen als Kapitelnamen
|
|
||||||
} else if (useFilenames.isSelected()) {
|
|
||||||
writer.write("chapter=" + files[i].getName() + "\n");
|
|
||||||
|
|
||||||
// Kapitelnamen selber angeben
|
|
||||||
} else if (typeSelf.isSelected()) {
|
|
||||||
String s = JOptionPane.showInputDialog(null,
|
|
||||||
"Kapitelname der Datei " + files[i].getName() + " angeben (" + (i + 1)
|
|
||||||
+ " von " + files.length + ")", "Kapitelnamen eingeben",
|
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
|
||||||
|
|
||||||
if (s == null) {
|
|
||||||
throw new EndingException();
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("chapter=" + s + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Startzeit des Kapitels schreiben
|
|
||||||
writer.write("start=" + time.asString() + ".00\n\n");
|
|
||||||
|
|
||||||
// Dauer der Datei zur gesammtzeit addieren
|
|
||||||
AudioFile af = AudioFileIO.read(files[i]);
|
|
||||||
|
|
||||||
time.add(0, 0, af.getAudioHeader().getTrackLength());
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
JOptionPane.showMessageDialog(null, "Fertig!\nDas Program schließt automatisch", "Fertig",
|
|
||||||
JOptionPane.INFORMATION_MESSAGE);
|
|
||||||
System.exit(0);
|
|
||||||
|
|
||||||
// Reagieren auf Fehler(Datei nicht lesbar, fehlender Ausgabeordner, anderes)
|
|
||||||
} catch (CannotReadException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null,
|
|
||||||
"<html><head></head><body>Die Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>konnte nicht gelesen werden</body></html>", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (TagException exc) {
|
|
||||||
JOptionPane.showMessageDialog(
|
|
||||||
null,
|
|
||||||
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (ReadOnlyFileException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null,
|
|
||||||
"<html><head></head><body>Die Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>ist eine Read-Only Datei</body></html>", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (InvalidAudioFrameException exc) {
|
|
||||||
JOptionPane.showMessageDialog(
|
|
||||||
null,
|
|
||||||
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (IOException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Es ist ein unbekannter Fehler aufgetreten", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
} catch (NoFolderSelectedException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Bitte wählen sie einen Ausgabeordner an", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (EndingException exc) {}
|
|
||||||
|
|
||||||
// Cursor auf Std setzen
|
|
||||||
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
131
src/audiobook/Book.java
Executable file
@@ -0,0 +1,131 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package audiobook;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents an audiobook
|
||||||
|
* @author Kim
|
||||||
|
*/
|
||||||
|
public class Book extends ArrayList<Chapter> {
|
||||||
|
private String album;
|
||||||
|
private String artist;
|
||||||
|
private File imageFile;
|
||||||
|
private String name;
|
||||||
|
private File targetFolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new empty audiobook
|
||||||
|
*/
|
||||||
|
public Book() {
|
||||||
|
name = "";
|
||||||
|
album = "";
|
||||||
|
artist = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Audiobook with a specified image File
|
||||||
|
* @param imageFile
|
||||||
|
*/
|
||||||
|
public Book(File imageFile) {
|
||||||
|
setImageFile(imageFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a <code>File</code> containing the cover of this audiobook.
|
||||||
|
* Returns <code>null</code> if no cover was selected.
|
||||||
|
*/
|
||||||
|
public File getImageFile() {
|
||||||
|
return imageFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the image of this audiobook. Images have to be in jpeg or png format
|
||||||
|
* @param imageFile a file containing an Image
|
||||||
|
* @throws IllegalArgumentException If the image is not a jpg, jpeg or png Image
|
||||||
|
*/
|
||||||
|
public void setImageFile(File imageFile) throws IllegalArgumentException {
|
||||||
|
if (!Files.FileActions.hasExtention(imageFile, ".jpg", ".jpeg", ".png")) {
|
||||||
|
throw new IllegalArgumentException("Illegal Image format");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.imageFile = imageFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the folder the audiobook is to be stored in.
|
||||||
|
* @return a Folder
|
||||||
|
*/
|
||||||
|
public File getTargetFolder() {
|
||||||
|
return targetFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the folder the audiobook is to be stored in
|
||||||
|
* @param folder a Folder
|
||||||
|
*/
|
||||||
|
public void setTargetFolder(File folder) throws IllegalArgumentException {
|
||||||
|
if (!folder.isDirectory()) {
|
||||||
|
throw new IllegalArgumentException("Not a Folder");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.targetFolder = folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the album-tag information
|
||||||
|
* @param album a String
|
||||||
|
*/
|
||||||
|
public void setAlbum(String album) {
|
||||||
|
this.album = album;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the artist-tag information
|
||||||
|
* @param artist aString
|
||||||
|
*/
|
||||||
|
public void setArtist(String artist) {
|
||||||
|
this.artist = artist;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the name of the audiobook
|
||||||
|
* @param name a String
|
||||||
|
*/
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the album-tag information
|
||||||
|
*/
|
||||||
|
public String getAlbum() {
|
||||||
|
return album;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the artist-tag information
|
||||||
|
*/
|
||||||
|
public String getArtist() {
|
||||||
|
return artist;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of this audiobook
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//~ Formatted by Jindent --- http://www.jindent.com
|
||||||
145
src/audiobook/Chapter.java
Executable file
@@ -0,0 +1,145 @@
|
|||||||
|
package audiobook;
|
||||||
|
|
||||||
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
import Dating.Time;
|
||||||
|
|
||||||
|
import org.jaudiotagger.audio.AudioFile;
|
||||||
|
import org.jaudiotagger.audio.AudioFileIO;
|
||||||
|
import org.jaudiotagger.audio.exceptions.CannotReadException;
|
||||||
|
import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException;
|
||||||
|
import org.jaudiotagger.audio.exceptions.ReadOnlyFileException;
|
||||||
|
import org.jaudiotagger.tag.TagException;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents a chapter in a audiobook
|
||||||
|
* @author Kim
|
||||||
|
*/
|
||||||
|
public class Chapter implements Comparable<Chapter> {
|
||||||
|
private File file;
|
||||||
|
private Dating.Time time;
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new empty <code>Chapter</code>
|
||||||
|
*/
|
||||||
|
public Chapter() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Chapter with the specified Values
|
||||||
|
* @param time the Duration of this track
|
||||||
|
* @param title the name of this chapter
|
||||||
|
* @param file the audiofile this chapter represents
|
||||||
|
*/
|
||||||
|
public Chapter(Time time, String title, File file) {
|
||||||
|
this.time = time;
|
||||||
|
this.title = title;
|
||||||
|
this.file = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the audiofile of this chapter
|
||||||
|
*/
|
||||||
|
public File getFile() {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a <code>Time</code> Object containing the information about the duration of this chapter
|
||||||
|
*/
|
||||||
|
public Time getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the title of this chapter
|
||||||
|
*/
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the audiofile of this chapter
|
||||||
|
* @param file a file.
|
||||||
|
* @param calc wether the time should be calculated after setting the file.
|
||||||
|
* @throws IllegalArgumentException If the file is not a m4a file.
|
||||||
|
*
|
||||||
|
* @see #calculateTime() Chapter.calculateTime()
|
||||||
|
* @see File
|
||||||
|
*/
|
||||||
|
public void setFile(File file, boolean calc) throws IllegalArgumentException, CannotReadException, IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException {
|
||||||
|
if(!file.getName().endsWith(".m4a")){
|
||||||
|
throw new IllegalArgumentException("Not a m4a File");
|
||||||
|
}
|
||||||
|
this.file = file;
|
||||||
|
if(calc){
|
||||||
|
calculateTime();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the audiofile of this chapter. The Time will NOT be calculated automatically
|
||||||
|
* @param f a File
|
||||||
|
* @throws IllegalArgumentException If the file is not a m4a file.
|
||||||
|
*
|
||||||
|
* @see File
|
||||||
|
*/
|
||||||
|
public void setFile(File f) throws IllegalArgumentException{
|
||||||
|
try{
|
||||||
|
setFile(f, false);
|
||||||
|
} catch(CannotReadException | IOException | TagException | ReadOnlyFileException | InvalidAudioFrameException ex){}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the duration of this chapter. Should be calculated using {@link calculateTime()}.
|
||||||
|
*
|
||||||
|
* @see #calculateTime() Chapter.calculateTime();
|
||||||
|
* @see Time
|
||||||
|
*/
|
||||||
|
public void setTime(Time time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the title of this chapter
|
||||||
|
* @param title
|
||||||
|
*/
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Automatically calculates the audiofile's Duration and sets it for this chapter
|
||||||
|
* @see org.jaudiotagger.audio.AudioFile
|
||||||
|
* @see org.jaudiotagger.audio.AudioFileIO#read(java.io.File f);
|
||||||
|
*/
|
||||||
|
public void calculateTime()
|
||||||
|
throws CannotReadException, IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException {
|
||||||
|
AudioFile aFile = AudioFileIO.read(file);
|
||||||
|
setTime(new Time(0, 0, aFile.getAudioHeader().getTrackLength()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Chapter o) {
|
||||||
|
return getTitle().compareTo(o.getTitle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//~ Formatted by Jindent --- http://www.jindent.com
|
||||||
212
src/audiobook/ChapterProfileCreator.form
Executable file
@@ -0,0 +1,212 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||||
|
<NonVisualComponents>
|
||||||
|
<Menu class="javax.swing.JMenuBar" name="jMenuBar1">
|
||||||
|
<SubComponents>
|
||||||
|
<Menu class="javax.swing.JMenu" name="jMenu1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Datei"/>
|
||||||
|
</Properties>
|
||||||
|
<SubComponents>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="UseNowMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="In Hörbuch übernehmen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="UseNowMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator2">
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="SaveMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Speichern"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SaveMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="OpenMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Öffnen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="OpenMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="SaveAsMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Speichern unter..."/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SaveAsMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator1">
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="CloseMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Schließen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="CloseMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
</NonVisualComponents>
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="0"/>
|
||||||
|
<Property name="title" type="java.lang.String" value="Kapitelprofil Editor"/>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="menuBar" type="java.lang.String" value="jMenuBar1"/>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="windowClosing" listener="java.awt.event.WindowListener" parameters="java.awt.event.WindowEvent" handler="formWindowClosing"/>
|
||||||
|
</Events>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" pref="480" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="addPanel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Component id="jScrollPane1" alignment="0" pref="232" max="32767" attributes="0"/>
|
||||||
|
<Component id="addPanel" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JPanel" name="addPanel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||||
|
<TitledBorder title="Hinzufügen"/>
|
||||||
|
</Border>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="NumberButton" alignment="0" pref="209" max="32767" attributes="0"/>
|
||||||
|
<Component id="FileNameButton" alignment="0" pref="209" max="32767" attributes="0"/>
|
||||||
|
<Component id="FilePathButton" alignment="0" pref="209" max="32767" attributes="0"/>
|
||||||
|
<Component id="TagButton" alignment="0" pref="209" max="32767" attributes="0"/>
|
||||||
|
<Component id="CommentButton" alignment="0" pref="209" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="NumberButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="FileNameButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="FilePathButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="TagButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="CommentButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="53" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="NumberButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Kapitelnummer"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="NumberButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="FileNameButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateinamen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="FileNameButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="FilePathButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateipfad"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="FilePathButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="TagButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Tag"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="TagButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="CommentButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Vorschau Kommentar"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="CommentButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTextArea" name="textArea">
|
||||||
|
<Properties>
|
||||||
|
<Property name="columns" type="int" value="20"/>
|
||||||
|
<Property name="rows" type="int" value="5"/>
|
||||||
|
<Property name="dragEnabled" type="boolean" value="true"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
||||||
523
src/audiobook/ChapterProfileCreator.java
Executable file
@@ -0,0 +1,523 @@
|
|||||||
|
package audiobook;
|
||||||
|
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import javax.swing.AbstractAction;
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPopupMenu;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.event.DocumentEvent;
|
||||||
|
import javax.swing.event.DocumentListener;
|
||||||
|
import other.Strings.QuoteProcessor;
|
||||||
|
import swing.Beans.MultipleInputPane;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class providing a JFrame to display a simple {@link javax.swing.JTextArea} to edit text.
|
||||||
|
* @author Kim
|
||||||
|
* @see JTextArea
|
||||||
|
* @see NumberQuoteProcessor
|
||||||
|
* @see M4aTagQuoteProcessor
|
||||||
|
* @see FileNameQuoteProcessor
|
||||||
|
* @see AdvancedFileNameQuoteProcessor
|
||||||
|
* @see FilepathQuoteProcessor
|
||||||
|
* @see QuoteProcessor
|
||||||
|
*/
|
||||||
|
public class ChapterProfileCreator extends javax.swing.JFrame {
|
||||||
|
|
||||||
|
/** Creates new form ChapterProfileCreator */
|
||||||
|
public ChapterProfileCreator() {
|
||||||
|
initComponents();
|
||||||
|
textArea.getDocument().addDocumentListener(new DocumentListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertUpdate(DocumentEvent e) {
|
||||||
|
if ((!textArea.getText().equals(lastText))) {
|
||||||
|
isSaved = false;
|
||||||
|
}
|
||||||
|
if (textArea.getText() == null || textArea.getText() == "") {
|
||||||
|
isSaved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeUpdate(DocumentEvent e) {
|
||||||
|
if (!textArea.getText().equals(lastText)) {
|
||||||
|
isSaved = false;
|
||||||
|
}
|
||||||
|
if (textArea.getText() == null || textArea.getText() == "") {
|
||||||
|
isSaved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changedUpdate(DocumentEvent e) {
|
||||||
|
if (!textArea.getText().equals(lastText)) {
|
||||||
|
isSaved = false;
|
||||||
|
}
|
||||||
|
if (textArea.getText() == null || textArea.getText() == "") {
|
||||||
|
isSaved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
addPanel = new javax.swing.JPanel();
|
||||||
|
NumberButton = new javax.swing.JButton();
|
||||||
|
FileNameButton = new javax.swing.JButton();
|
||||||
|
FilePathButton = new javax.swing.JButton();
|
||||||
|
TagButton = new javax.swing.JButton();
|
||||||
|
CommentButton = new javax.swing.JButton();
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
textArea = new javax.swing.JTextArea();
|
||||||
|
jMenuBar1 = new javax.swing.JMenuBar();
|
||||||
|
jMenu1 = new javax.swing.JMenu();
|
||||||
|
UseNowMenuItem = new javax.swing.JMenuItem();
|
||||||
|
jSeparator2 = new javax.swing.JPopupMenu.Separator();
|
||||||
|
SaveMenuItem = new javax.swing.JMenuItem();
|
||||||
|
OpenMenuItem = new javax.swing.JMenuItem();
|
||||||
|
SaveAsMenuItem = new javax.swing.JMenuItem();
|
||||||
|
jSeparator1 = new javax.swing.JPopupMenu.Separator();
|
||||||
|
CloseMenuItem = new javax.swing.JMenuItem();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||||
|
setTitle("Kapitelprofil Editor");
|
||||||
|
addWindowListener(new java.awt.event.WindowAdapter() {
|
||||||
|
public void windowClosing(java.awt.event.WindowEvent evt) {
|
||||||
|
formWindowClosing(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
addPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Hinzufügen"));
|
||||||
|
|
||||||
|
NumberButton.setText("Kapitelnummer");
|
||||||
|
NumberButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
NumberButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
FileNameButton.setText("Dateinamen");
|
||||||
|
FileNameButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
FileNameButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
FilePathButton.setText("Dateipfad");
|
||||||
|
FilePathButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
FilePathButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
TagButton.setText("Tag");
|
||||||
|
TagButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
TagButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
CommentButton.setText("Vorschau Kommentar");
|
||||||
|
CommentButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
CommentButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
javax.swing.GroupLayout addPanelLayout = new javax.swing.GroupLayout(addPanel);
|
||||||
|
addPanel.setLayout(addPanelLayout);
|
||||||
|
addPanelLayout.setHorizontalGroup(
|
||||||
|
addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(addPanelLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(NumberButton, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)
|
||||||
|
.addComponent(FileNameButton, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)
|
||||||
|
.addComponent(FilePathButton, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)
|
||||||
|
.addComponent(TagButton, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)
|
||||||
|
.addComponent(CommentButton, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)))
|
||||||
|
);
|
||||||
|
addPanelLayout.setVerticalGroup(
|
||||||
|
addPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(addPanelLayout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(NumberButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(FileNameButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(FilePathButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(TagButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(CommentButton)
|
||||||
|
.addGap(53, 53, 53))
|
||||||
|
);
|
||||||
|
|
||||||
|
textArea.setColumns(20);
|
||||||
|
textArea.setRows(5);
|
||||||
|
textArea.setDragEnabled(true);
|
||||||
|
jScrollPane1.setViewportView(textArea);
|
||||||
|
|
||||||
|
jMenu1.setText("Datei");
|
||||||
|
|
||||||
|
UseNowMenuItem.setText("In Hörbuch übernehmen");
|
||||||
|
UseNowMenuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
UseNowMenuItemActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(UseNowMenuItem);
|
||||||
|
jMenu1.add(jSeparator2);
|
||||||
|
|
||||||
|
SaveMenuItem.setText("Speichern");
|
||||||
|
SaveMenuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
SaveMenuItemActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(SaveMenuItem);
|
||||||
|
|
||||||
|
OpenMenuItem.setText("Öffnen");
|
||||||
|
OpenMenuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
OpenMenuItemActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(OpenMenuItem);
|
||||||
|
|
||||||
|
SaveAsMenuItem.setText("Speichern unter...");
|
||||||
|
SaveAsMenuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
SaveAsMenuItemActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(SaveAsMenuItem);
|
||||||
|
jMenu1.add(jSeparator1);
|
||||||
|
|
||||||
|
CloseMenuItem.setText("Schließen");
|
||||||
|
CloseMenuItem.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
CloseMenuItemActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jMenu1.add(CloseMenuItem);
|
||||||
|
|
||||||
|
jMenuBar1.add(jMenu1);
|
||||||
|
|
||||||
|
setJMenuBar(jMenuBar1);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(addPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE)
|
||||||
|
.addComponent(addPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 232, Short.MAX_VALUE))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds text to the TextArea to use the chapter number
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void NumberButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_NumberButtonActionPerformed
|
||||||
|
JPopupMenu menu = new JPopupMenu();
|
||||||
|
JMenuItem normal = new JMenuItem(new AbstractAction("Normal") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%number<formatted='false'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
JMenuItem formatted = new JMenuItem(new AbstractAction("Formatiert") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%number<formatted='true'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
normal.setToolTipText("Kapitelnummer(1, 2, ...)");
|
||||||
|
formatted.setToolTipText("Formatierte Kapitelnummer(001, 002, ...)");
|
||||||
|
menu.add(normal);
|
||||||
|
menu.add(formatted);
|
||||||
|
menu.show(this, getMousePosition().x, getMousePosition().y);
|
||||||
|
}//GEN-LAST:event_NumberButtonActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds text to the TextArea to use the filepath
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void FilePathButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_FilePathButtonActionPerformed
|
||||||
|
textArea.append("<%filepath>");
|
||||||
|
}//GEN-LAST:event_FilePathButtonActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds text to the TextArea to use the Filename
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void FileNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_FileNameButtonActionPerformed
|
||||||
|
JPopupMenu menu = new JPopupMenu();
|
||||||
|
JMenuItem withExt = new JMenuItem(new AbstractAction("Mit Endung") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%fileName<showExtention='true'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
JMenuItem withoutExt = new JMenuItem(new AbstractAction("Ohne Endung") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%fileName<showExtention='false'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
JMenuItem advanced = new JMenuItem(new AbstractAction("Teil des Dateinamens") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
MultipleInputPane pane = new MultipleInputPane("Trennungstext", "Index");
|
||||||
|
pane.setToolTipText(0, "Bsp: Datei: \"01-Test.m4a\" - Trennungstext: \"-\"");
|
||||||
|
pane.setToolTipText(1, "Der Index zwischen den Trennungstexten im Dateinamen. Muss eine Zahl sein(kann mit '#' enden; dann werden alle Teile ab dem Index übernommen)!");
|
||||||
|
if (pane.showDialog(null, "Eingabe", JOptionPane.PLAIN_MESSAGE) == JOptionPane.OK_OPTION) {
|
||||||
|
textArea.append("<%advancedFileName<sepText='" + pane.getText(0) + "' index='" + pane.getText(1) + "'>>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.add(withExt);
|
||||||
|
menu.add(withoutExt);
|
||||||
|
menu.add(advanced);
|
||||||
|
menu.show(this, getMousePosition().x, getMousePosition().y);
|
||||||
|
}//GEN-LAST:event_FileNameButtonActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the file was saved and exits
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void CloseMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CloseMenuItemActionPerformed
|
||||||
|
if (!isSaved) {
|
||||||
|
if (JOptionPane.showConfirmDialog(this, "Die Datei wurde nicht gespeichert. Fenster trotzdem schließen?", "Schließen?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.NO_OPTION) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_CloseMenuItemActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a JFileChooser Dialog to let the user save the text
|
||||||
|
* @param evt
|
||||||
|
*/
|
||||||
|
private void SaveAsMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SaveAsMenuItemActionPerformed
|
||||||
|
File userDir = new File(System.getProperty("user.dir"));
|
||||||
|
File profileFolder = new File(userDir.getPath() + "/Profile");
|
||||||
|
JFileChooser chooser = new JFileChooser(profileFolder.exists() ? profileFolder : userDir);
|
||||||
|
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
|
||||||
|
chooser.setMultiSelectionEnabled(false);
|
||||||
|
|
||||||
|
if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
if (chooser.getSelectedFile().exists() && JOptionPane.showConfirmDialog(this, "Die Datei " + chooser.getSelectedFile().getPath() + " existiert bereits. Überschreiben?", "Überschreiben?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.NO_OPTION) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
saveFile = chooser.getSelectedFile();
|
||||||
|
lastText = textArea.getText();
|
||||||
|
FileWriter FWriter = new FileWriter(saveFile);
|
||||||
|
BufferedWriter writer = new BufferedWriter(FWriter);
|
||||||
|
|
||||||
|
writer.write(textArea.getText());
|
||||||
|
writer.close();
|
||||||
|
FWriter.close();
|
||||||
|
isSaved = true;
|
||||||
|
} catch (IOException ex) {
|
||||||
|
JOptionPane.showMessageDialog(this, "Beim Speichern ist ein Fehler aufgetreten.", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_SaveAsMenuItemActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Automatically saves the file at the last given file location. If there is no last location this method calls {@link #SaveAsMenuItemActionPerformed(java.awt.event.ActionEvent) SaveAsMenuItemActionPerformed()}
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void SaveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_SaveMenuItemActionPerformed
|
||||||
|
if (saveFile == null) {
|
||||||
|
SaveAsMenuItemActionPerformed(evt);
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
lastText = textArea.getText();
|
||||||
|
FileWriter FWriter = new FileWriter(saveFile);
|
||||||
|
BufferedWriter writer = new BufferedWriter(FWriter);
|
||||||
|
|
||||||
|
writer.write(textArea.getText());
|
||||||
|
writer.close();
|
||||||
|
FWriter.close();
|
||||||
|
isSaved = true;
|
||||||
|
} catch (IOException ex) {
|
||||||
|
JOptionPane.showMessageDialog(this, "Beim Speichern ist ein Fehler aufgetreten.", "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_SaveMenuItemActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the file was saved and exits
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
|
||||||
|
CloseMenuItemActionPerformed(null);
|
||||||
|
}//GEN-LAST:event_formWindowClosing
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds text to the TextArea to use tags inside the files
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void TagButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_TagButtonActionPerformed
|
||||||
|
JPopupMenu menu = new JPopupMenu();
|
||||||
|
menu.add(new AbstractAction("Titel") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%tag<id='title'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.add(new AbstractAction("Album") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%tag<id='album'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.add(new AbstractAction("Interpret") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%tag<id='artist'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.add(new AbstractAction("Albumsinterpret") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%tag<id='album_artist'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.add(new AbstractAction("Tracknummer") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%tag<id='track'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.add(new AbstractAction("Komponist") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
textArea.append("<%tag<id='composer'>>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.show(this, getMousePosition().x, getMousePosition().y);
|
||||||
|
}//GEN-LAST:event_TagButtonActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds text to the TextArea to use preview text
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void CommentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CommentButtonActionPerformed
|
||||||
|
textArea.insert("#\n", 0);
|
||||||
|
}//GEN-LAST:event_CommentButtonActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lets the user use the typed profile right now in the active project
|
||||||
|
* @param evt Auto generated event; Not used
|
||||||
|
*/
|
||||||
|
private void UseNowMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_UseNowMenuItemActionPerformed
|
||||||
|
try {
|
||||||
|
BufferedReader reader = new BufferedReader(new StringReader(textArea.getText()));
|
||||||
|
String profile = "";
|
||||||
|
while ((profile = reader.readLine()).startsWith("#")) {
|
||||||
|
}
|
||||||
|
Main.window.useChapterProfile(profile);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_UseNowMenuItemActionPerformed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lets the user choose a text file to display and edit
|
||||||
|
* @param evt
|
||||||
|
*/
|
||||||
|
private void OpenMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OpenMenuItemActionPerformed
|
||||||
|
if (!isSaved) {
|
||||||
|
if (JOptionPane.showConfirmDialog(this, "Die Datei wurde nicht gespeichert. Fortfahren?", "Öffnen?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.NO_OPTION) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
File userDir = new File(System.getProperty("user.dir"));
|
||||||
|
File profileFolder = new File(userDir.getPath() + "/Profile");
|
||||||
|
JFileChooser chooser = new JFileChooser(profileFolder.exists() ? profileFolder : userDir);
|
||||||
|
chooser.setMultiSelectionEnabled(false);
|
||||||
|
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
try {
|
||||||
|
textArea.setText("");
|
||||||
|
BufferedReader reader = new BufferedReader(new FileReader(chooser.getSelectedFile()));
|
||||||
|
String line = "";
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
textArea.append((textArea.getText().length() < 1 ? "" : "\n") + line);
|
||||||
|
}
|
||||||
|
isSaved = true;
|
||||||
|
saveFile = chooser.getSelectedFile();
|
||||||
|
lastText = textArea.getText();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_OpenMenuItemActionPerformed
|
||||||
|
|
||||||
|
//<editor-fold defaultstate="collapsed" desc="Variables declaration">
|
||||||
|
private boolean isSaved = false;
|
||||||
|
private File saveFile;
|
||||||
|
private String lastText;
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JMenuItem CloseMenuItem;
|
||||||
|
private javax.swing.JButton CommentButton;
|
||||||
|
private javax.swing.JButton FileNameButton;
|
||||||
|
private javax.swing.JButton FilePathButton;
|
||||||
|
private javax.swing.JButton NumberButton;
|
||||||
|
private javax.swing.JMenuItem OpenMenuItem;
|
||||||
|
private javax.swing.JMenuItem SaveAsMenuItem;
|
||||||
|
private javax.swing.JMenuItem SaveMenuItem;
|
||||||
|
private javax.swing.JButton TagButton;
|
||||||
|
private javax.swing.JMenuItem UseNowMenuItem;
|
||||||
|
private javax.swing.JPanel addPanel;
|
||||||
|
private javax.swing.JMenu jMenu1;
|
||||||
|
private javax.swing.JMenuBar jMenuBar1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
private javax.swing.JPopupMenu.Separator jSeparator1;
|
||||||
|
private javax.swing.JPopupMenu.Separator jSeparator2;
|
||||||
|
private javax.swing.JTextArea textArea;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
//</editor-fold>
|
||||||
|
}
|
||||||
107
src/audiobook/Main.java
Executable file
@@ -0,0 +1,107 @@
|
|||||||
|
package audiobook;
|
||||||
|
|
||||||
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
import Applications.Application;
|
||||||
|
|
||||||
|
import java.awt.Desktop;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import swing.LAF.LAF;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URI;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Kim
|
||||||
|
*/
|
||||||
|
public class Main extends Applications.Application {
|
||||||
|
|
||||||
|
/** The book which is currently edited */
|
||||||
|
public static Book currBook;
|
||||||
|
|
||||||
|
/** Variable used as default directory in JFileChooser. Represents the last selected directory. */
|
||||||
|
public static File lastDir;
|
||||||
|
|
||||||
|
/** An Object representing the non-static methods of this class */
|
||||||
|
public static Main mainObj;
|
||||||
|
|
||||||
|
/** An Instance of {@link MainWindow} which provides methods to create an audiobook */
|
||||||
|
public static MainWindow window;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main method called on start
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
mainObj = new Main();
|
||||||
|
lastDir = new File(System.getProperty("user.home"));
|
||||||
|
LAF.setLAF(LAF.SystemLAF);
|
||||||
|
mainObj.createAboutBox(new ImageIcon(Main.class.getResource("audiobook.png")).getImage(),
|
||||||
|
new String[] { "Version",
|
||||||
|
"Autor" }, new String[] { "2.8 Beta", "Kim" });
|
||||||
|
|
||||||
|
if (!System.getProperty("os.name").startsWith("Windows")) {
|
||||||
|
if (JOptionPane.showConfirmDialog(
|
||||||
|
null,
|
||||||
|
"Dieses Programm ist nur auf Windows Betriebssystemen vollständig nutzbar und wurde nicht auf anderen Systemen getestet.\n\n Möchten Sie das Programm beenden?",
|
||||||
|
"Warnung", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(Float.parseFloat(System.getProperty("java.specification.version")) >= 1.7)) {
|
||||||
|
JOptionPane.showMessageDialog(null,
|
||||||
|
"Dieses Programm benötigt Java Version 1.7 oder höher.\nBitte Laden Sie die Version von oracle.com",
|
||||||
|
"Fehler", JOptionPane.WARNING_MESSAGE);
|
||||||
|
try {
|
||||||
|
Desktop.getDesktop().browse(new URI("http://www.oracle.com/technetwork/java/javase/downloads/java-se-jre-7-download-432155.html"));
|
||||||
|
} catch (URISyntaxException | IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
currBook = new Book();
|
||||||
|
window = new MainWindow();
|
||||||
|
window.setLocation(Application.getScreenCenterFor(window));
|
||||||
|
window.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getInfo() {
|
||||||
|
return "Ein Programm zum Erstellen von iTunes Hörbüchern";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return "Audiobook Maker";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void exit() {
|
||||||
|
int result = JOptionPane.showConfirmDialog(null,
|
||||||
|
"Achtung: Die Eingaben werden nicht gespeichert. Vorher noch eine POD Datei erstellen?",
|
||||||
|
"Beenden?", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
|
||||||
|
|
||||||
|
if (result == JOptionPane.NO_OPTION) {
|
||||||
|
super.exit();
|
||||||
|
} else if (result == JOptionPane.YES_OPTION) {
|
||||||
|
window.createPODFile();
|
||||||
|
super.exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//~ Formatted by Jindent --- http://www.jindent.com
|
||||||
572
src/audiobook/MainWindow.form
Executable file
@@ -0,0 +1,572 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||||
|
<NonVisualComponents>
|
||||||
|
<Component class="javax.swing.ButtonGroup" name="buttonGroup">
|
||||||
|
</Component>
|
||||||
|
<Menu class="javax.swing.JMenuBar" name="menuBar">
|
||||||
|
<SubComponents>
|
||||||
|
<Menu class="javax.swing.JMenu" name="FileMenu">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Datei"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openFilesButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<SubComponents>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="openFilesMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateien öffnen"/>
|
||||||
|
</Properties>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="loadPODFileMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="POD Datei laden"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="loadPODFileMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JPopupMenu$Separator" name="jSeparator1">
|
||||||
|
</MenuItem>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="ExitMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Beenden"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="ExitMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
<Menu class="javax.swing.JMenu" name="SpecialMenu">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Spezial"/>
|
||||||
|
</Properties>
|
||||||
|
<SubComponents>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="createChapterProfileMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Kapitelprofil Editor"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createChapterProfileMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
<Menu class="javax.swing.JMenu" name="HelpMenu">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Hilfe"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value=""/>
|
||||||
|
</Properties>
|
||||||
|
<SubComponents>
|
||||||
|
<MenuItem class="javax.swing.JMenuItem" name="AboutMenuItem">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Über"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="AboutMenuItemActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</MenuItem>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
</SubComponents>
|
||||||
|
</Menu>
|
||||||
|
</NonVisualComponents>
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="0"/>
|
||||||
|
<Property name="title" type="java.lang.String" value="Audiobook Maker"/>
|
||||||
|
<Property name="iconImage" type="java.awt.Image" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
|
<Connection code="new ImageIcon(Main.class.getResource("audiobook_icon.png")).getImage()" type="code"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="menuBar" type="java.lang.String" value="menuBar"/>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="windowClosing" listener="java.awt.event.WindowListener" parameters="java.awt.event.WindowEvent" handler="formWindowClosing"/>
|
||||||
|
</Events>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Component id="useProfile" max="32767" attributes="1"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="SortButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="FilesScrollPane" alignment="0" pref="228" max="32767" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
|
<Component id="removeButton" max="32767" attributes="1"/>
|
||||||
|
<Component id="downButton" max="32767" attributes="1"/>
|
||||||
|
<Component id="upButton" max="32767" attributes="1"/>
|
||||||
|
<Component id="openFilesButton" alignment="0" max="32767" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="BookPropPanel" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="ChapterPropPanel" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<Component id="FilesScrollPane" pref="371" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="useProfile" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="SortButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Component id="openFilesButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="47" max="-2" attributes="0"/>
|
||||||
|
<Component id="upButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="downButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="removeButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="BookPropPanel" min="-2" max="-2" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="ChapterPropPanel" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="openFilesButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateien öffnen"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Dateien zum Hörbuch hinzufügen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="openFilesButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="FilesScrollPane">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JList" name="ChaptersList">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
|
<Connection code="new DefaultListModel()" type="code"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="ChaptersListValueChanged"/>
|
||||||
|
<EventHandler event="keyPressed" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="ChaptersListKeyPressed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JButton" name="upButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="nach oben"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Ausgewähltes Kapitel nach oben bewegen"/>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="upButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="downButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="nach unten"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Ausgewähltes Kapitel nach unten bewegen"/>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="downButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="removeButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Entfernen"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Ausgewähltes Kapitel entfernen"/>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="removeButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JPanel" name="ChapterPropPanel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||||
|
<TitledBorder title="Kapitel-Eigenschaften"/>
|
||||||
|
</Border>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="1" max="-2" attributes="0">
|
||||||
|
<Component id="TitleLabel" alignment="1" max="32767" attributes="1"/>
|
||||||
|
<Component id="FileLabel" alignment="1" max="32767" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="fileField" pref="571" max="32767" attributes="0"/>
|
||||||
|
<Component id="titleField" alignment="0" pref="571" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="FileLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="fileField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="TitleLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="titleField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace pref="141" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="TitleLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Titel:"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="titleField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Namen für ausgewähltes Kapitel angeben"/>
|
||||||
|
<Property name="dragEnabled" type="boolean" value="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="titleFieldActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="titleField.getDocument().addDocumentListener(new DocumentListener() {
 public void changedUpdate(DocumentEvent e){
 renameChapter();
 }

 public void removeUpdate(DocumentEvent e){
 renameChapter();
 }

 public void insertUpdate(DocumentEvent e){
 renameChapter();
 }
});"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="FileLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Datei:"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="fileField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Container class="javax.swing.JPanel" name="BookPropPanel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
|
||||||
|
<TitledBorder title="Hörbuch-Eigenschaften"/>
|
||||||
|
</Border>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<Component id="NameField" pref="225" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="createPodFileButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="createAudiobookButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Component id="TargetDirLabel" alignment="1" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="CoverLabel" alignment="1" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<Component id="CoverField" pref="305" max="32767" attributes="1"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="SearchCoverButton" min="-2" max="-2" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="FolderField" alignment="1" pref="358" max="32767" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
|
<Component id="RemoveCoverButton" alignment="0" max="32767" attributes="1"/>
|
||||||
|
<Component id="SearchFolderButton" alignment="0" max="32767" attributes="1"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="CopyRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="moveRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="DeleteFiles" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="138" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="editTagsButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="NameTagLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="NameTag" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="ArtistTagLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="ArtistTag" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="AlbumTagLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="AlbumTag" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="165" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="CoverLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="CoverField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="RemoveCoverButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="SearchCoverButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="TargetDirLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="FolderField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="SearchFolderButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="CopyRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="moveRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="DeleteFiles" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="editTagsButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="NameTagLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="NameTag" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="ArtistTagLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="ArtistTag" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="AlbumTagLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="AlbumTag" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="createAudiobookButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="createPodFileButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="NameField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="CoverLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Cover:"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="CoverField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="SearchCoverButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="..."/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Cover-Datei suchen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SearchCoverButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="createAudiobookButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Hörbuch erstellen"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value=".m4b Datei erstellen (vorher muss eine .POD Datei erstellt werden)"/>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createAudiobookButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="TargetDirLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Ordner:"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="FolderField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="SearchFolderButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Suchen..."/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Zielordner für die Dateien auswählen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SearchFolderButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JRadioButton" name="CopyRadioButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
|
<ComponentRef name="buttonGroup"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="selected" type="boolean" value="true"/>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateien kopieren"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Audiodateien in den Zielordner kopieren"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JRadioButton" name="moveRadioButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
|
<ComponentRef name="buttonGroup"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateien verschieben"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Audiodateien in den Zielordner verschieben"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="createPodFileButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value=".POD Datei erstellen"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value=""/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createPodFileButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="NameField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Name"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Namen für das Hörbuch auswählen"/>
|
||||||
|
</Properties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_InitCodePost" type="java.lang.String" value="NameField.getDocument().addDocumentListener(new DocumentListener() {
 public void changedUpdate(DocumentEvent e){
 checkPOD();
 }

 public void removeUpdate(DocumentEvent e){
 checkPOD();
 }

 public void insertUpdate(DocumentEvent e){
 checkPOD();
 }
});"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="editTagsButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Tags bearbeiten"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Tags für das Hörbuch eingeben. ACHTUNG: funktioniert noch nicht unbedingt bei iTunes"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="editTagsButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="RemoveCoverButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Löschen"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="RemoveCoverButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="NameTagLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Name: "/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="NameTag">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="..."/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="ArtistTagLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Interpret: "/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="ArtistTag">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="..."/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="AlbumTagLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Album: "/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="AlbumTag">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="..."/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="DeleteFiles">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Dateien löschen"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Dateien nach erstellen des Hörbuches aus Zielordner löschen (Sie werden nicht mehr benötigt)"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JButton" name="useProfile">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Kapitelprofil anwenden"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Namen der ausgewählten Kapitel automatisch bearbeiten"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="useProfileActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="SortButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="Sortieren"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="SortButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
||||||
1668
src/audiobook/MainWindow.java
Executable file
74
src/audiobook/ProgressDialog.form
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="0"/>
|
||||||
|
<Property name="title" type="java.lang.String" value=".POD Datei erstellen"/>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="progressBar" alignment="0" pref="424" max="32767" attributes="0"/>
|
||||||
|
<Component id="ActionLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="MessageLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="ActionLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
|
<Component id="MessageLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="progressBar" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JProgressBar" name="progressBar">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="1"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="ActionLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="ActionLabel"/>
|
||||||
|
</Properties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="1"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="MessageLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" value="MessageLabel"/>
|
||||||
|
</Properties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="1"/>
|
||||||
|
</AuxValues>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
||||||
102
src/audiobook/ProgressDialog.java
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
package audiobook;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JProgressBar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents a simple dialog containing a progress bar and two labels
|
||||||
|
* @author Kim
|
||||||
|
* @see JProgressBar
|
||||||
|
* @see JLabel
|
||||||
|
*/
|
||||||
|
public class ProgressDialog extends javax.swing.JDialog implements PropertyChangeListener {
|
||||||
|
|
||||||
|
/** Creates new form ProgressDialog */
|
||||||
|
public ProgressDialog(java.awt.Frame parent, boolean modal) {
|
||||||
|
super(parent, modal);
|
||||||
|
setLocationRelativeTo(parent);
|
||||||
|
initComponents();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
progressBar = new javax.swing.JProgressBar();
|
||||||
|
ActionLabel = new javax.swing.JLabel();
|
||||||
|
MessageLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||||
|
setTitle(".POD Datei erstellen");
|
||||||
|
|
||||||
|
ActionLabel.setText("ActionLabel");
|
||||||
|
|
||||||
|
MessageLabel.setText("MessageLabel");
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(progressBar, javax.swing.GroupLayout.DEFAULT_SIZE, 424, Short.MAX_VALUE)
|
||||||
|
.addComponent(ActionLabel)
|
||||||
|
.addComponent(MessageLabel))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(ActionLabel)
|
||||||
|
.addGap(18, 18, 18)
|
||||||
|
.addComponent(MessageLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(progressBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
|
switch(evt.getPropertyName()){
|
||||||
|
case "ActionLabel":
|
||||||
|
ActionLabel.setText(evt.getNewValue().toString());
|
||||||
|
break;
|
||||||
|
case "MessageLabel":
|
||||||
|
MessageLabel.setText(evt.getNewValue().toString());
|
||||||
|
break;
|
||||||
|
case "Maximum":
|
||||||
|
progressBar.setMaximum(Integer.parseInt(evt.getNewValue().toString()));
|
||||||
|
break;
|
||||||
|
case "ProgressValue":
|
||||||
|
progressBar.setValue(Integer.parseInt(evt.getNewValue().toString()));
|
||||||
|
break;
|
||||||
|
case "Error":
|
||||||
|
JOptionPane.showMessageDialog(this, evt.getNewValue(), "Fehler", JOptionPane.ERROR_MESSAGE);
|
||||||
|
break;
|
||||||
|
case "Finish":
|
||||||
|
if(Boolean.parseBoolean(evt.getNewValue().toString())){
|
||||||
|
JOptionPane.showMessageDialog(this, "Prozess erfolgreich abgeschlossen", "Fertig", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else{
|
||||||
|
JOptionPane.showMessageDialog(this, "Der Prozess konnte nicht abgeschlossen werden.", "Fehler", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
}
|
||||||
|
setVisible(false);
|
||||||
|
dispose();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//<editor-fold defaultstate="collapsed" desc="Variables declaration">
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
public javax.swing.JLabel ActionLabel;
|
||||||
|
public javax.swing.JLabel MessageLabel;
|
||||||
|
public javax.swing.JProgressBar progressBar;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
//</editor-fold>
|
||||||
|
}
|
||||||
BIN
src/audiobook/audiobook.png
Executable file
|
After Width: | Height: | Size: 36 KiB |
BIN
src/audiobook/audiobook_icon.png
Executable file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
src/audiobook/audiobook_icon2.png
Executable file
|
After Width: | Height: | Size: 1.1 KiB |
@@ -1,319 +0,0 @@
|
|||||||
//~--- non-JDK imports --------------------------------------------------------
|
|
||||||
|
|
||||||
import org.jaudiotagger.audio.*;
|
|
||||||
import org.jaudiotagger.audio.exceptions.*;
|
|
||||||
import org.jaudiotagger.tag.*;
|
|
||||||
|
|
||||||
import Dating.Time;
|
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.awt.event.*;
|
|
||||||
import java.awt.image.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
import javax.imageio.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
class adapter extends WindowAdapter {
|
|
||||||
@Override
|
|
||||||
public void windowClosing(WindowEvent e) {
|
|
||||||
System.exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public class audiobookMaker extends JFrame {
|
|
||||||
static Time time = new Time(0, 0, 0);
|
|
||||||
String de[] = {
|
|
||||||
"Ordnername", "Covername", "Anzahl der Editpoints", ".POD Datei erstellen", "1 Titel, 2 Titel, ...",
|
|
||||||
"1-1 Titel, 1-2 Titel...3-7 Titel, ...", "Dateinamen selber angeben", "Dateinamen angeben. Datei Nr.",
|
|
||||||
"Erfolgreich!\nDas Programm wird beendet...", "Unbekannter Fehler!", "Anzahl der CDs",
|
|
||||||
"Anzahl der Titel auf CD ", "Bilddatei wurde nicht gefunden!\nDie Datei wird ohne Cover erstellt!"
|
|
||||||
};
|
|
||||||
String en[] = {
|
|
||||||
"Foldername", "Covername", "Number of Editpoints", "Create .POD file", "1 Title, 2 Title, ...",
|
|
||||||
"1-1 Title, 1-2 Title...3-7 Title, ...", "Type in Filenames by yourself", "Type in Filenames. File no.",
|
|
||||||
"Build Succesful!\nProgram will exit...", "Unknown error!", "Type in number of CDs", "Number of Tracks on CD ",
|
|
||||||
"Image was not found!\nFile will created without Cover!"
|
|
||||||
};
|
|
||||||
String[] selectedLanguage = de;
|
|
||||||
public JLabel editpointLabel = new JLabel(selectedLanguage[2]);
|
|
||||||
public JSpinner editpointField = new JSpinner(new SpinnerNumberModel(1, 0, 1000, 1));
|
|
||||||
public JLabel createFileStdLabel = new JLabel(selectedLanguage[4]);
|
|
||||||
public JButton createFileStd = new JButton(selectedLanguage[3]);
|
|
||||||
public JLabel createFileSelfLabel = new JLabel(selectedLanguage[6]);
|
|
||||||
public JButton createFileSelf = new JButton(selectedLanguage[3]);
|
|
||||||
public JLabel createFileMultiCDLabel = new JLabel(selectedLanguage[5]);
|
|
||||||
public JButton createFileMultiCD = new JButton(selectedLanguage[3]);
|
|
||||||
|
|
||||||
// Objekte inizialisieren
|
|
||||||
public JLabel FolderLabel = new JLabel(selectedLanguage[0]);
|
|
||||||
public JTextField Folder = new JTextField();
|
|
||||||
public JLabel CoverLabel = new JLabel(selectedLanguage[1]);
|
|
||||||
public JTextField CoverField = new JTextField();
|
|
||||||
BufferedImage CoverImage;
|
|
||||||
|
|
||||||
// \Objekte
|
|
||||||
public audiobookMaker() {
|
|
||||||
super("iPod audiobook Maker");
|
|
||||||
addWindowListener(new adapter());
|
|
||||||
this.setSize(600, 300);
|
|
||||||
setLayout(null);
|
|
||||||
|
|
||||||
// Objekte einstellen
|
|
||||||
FolderLabel.setBounds(55, 22, 100, 20);
|
|
||||||
Folder.setBounds(135, 20, 400, 25);
|
|
||||||
CoverLabel.setBounds(50, 62, 100, 20);
|
|
||||||
CoverField.setBounds(135, 60, 400, 25);
|
|
||||||
editpointLabel.setBounds(5, 102, 130, 20);
|
|
||||||
editpointField.setBounds(135, 100, 100, 25);
|
|
||||||
createFileStdLabel.setBounds(210, 222, 180, 20);
|
|
||||||
createFileStd.setBounds(210, 180, 150, 30);
|
|
||||||
createFileStd.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
|
||||||
createStd();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
createFileSelfLabel.setBounds(400, 222, 180, 20);
|
|
||||||
createFileSelf.setBounds(400, 180, 150, 30);
|
|
||||||
createFileSelf.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
|
||||||
createSelf();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
createFileMultiCDLabel.setBounds(20, 222, 180, 20);
|
|
||||||
createFileMultiCD.setBounds(20, 180, 150, 30);
|
|
||||||
createFileMultiCD.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent arg0) {
|
|
||||||
createMultiCD();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// \Objekte
|
|
||||||
add(FolderLabel);
|
|
||||||
add(Folder);
|
|
||||||
add(CoverLabel);
|
|
||||||
add(CoverField);
|
|
||||||
add(editpointLabel);
|
|
||||||
add(editpointField);
|
|
||||||
add(createFileStd);
|
|
||||||
add(createFileStdLabel);
|
|
||||||
add(createFileSelf);
|
|
||||||
add(createFileSelfLabel);
|
|
||||||
add(createFileMultiCD);
|
|
||||||
add(createFileMultiCDLabel);
|
|
||||||
this.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createStd() {
|
|
||||||
try {
|
|
||||||
FileWriter creator = new FileWriter("Podcast.POD");
|
|
||||||
BufferedWriter writer = new BufferedWriter(creator);
|
|
||||||
int Editpoints = (int) Double.parseDouble(editpointField.getValue().toString());
|
|
||||||
boolean isCover;
|
|
||||||
|
|
||||||
writer.write("[Podcast]\n");
|
|
||||||
writer.write("altfolder1=" + Folder.getText() + "\n");
|
|
||||||
writer.write("basename=" + Folder.getText() + "\n");
|
|
||||||
|
|
||||||
try {
|
|
||||||
File CoverFile = new File(Folder.getText() + "\\" + CoverField.getText());
|
|
||||||
|
|
||||||
CoverImage = ImageIO.read(CoverFile);
|
|
||||||
writer.write("artwork=" + CoverField.getText() + "\n");
|
|
||||||
writer.write("imgwidth=" + CoverImage.getWidth() + "\n");
|
|
||||||
writer.write("imgheight=" + CoverImage.getHeight() + "\n");
|
|
||||||
isCover = true;
|
|
||||||
} catch (IOException e) {
|
|
||||||
JOptionPane.showMessageDialog(this, selectedLanguage[12]);
|
|
||||||
isCover = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("editpointcount=" + Editpoints + "\n\n\n\n\n\n");
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 1; i <= Editpoints; i++) {
|
|
||||||
writer.write("[Editpoint_" + i + "]\n");
|
|
||||||
|
|
||||||
if (isCover == true) {
|
|
||||||
writer.write("image=" + CoverField.getText() + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("audiofile=" + i + " " + Folder.getText() + ".m4a\n");
|
|
||||||
writer.write("chapter=" + i + "\n");
|
|
||||||
writer.write("start=" + "\n\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
JOptionPane.showMessageDialog(null, selectedLanguage[8]);
|
|
||||||
System.exit(0);
|
|
||||||
} catch (Exception e) {
|
|
||||||
JOptionPane.showMessageDialog(null, selectedLanguage[9]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createSelf() {
|
|
||||||
try {
|
|
||||||
FileWriter creator = new FileWriter("Podcast.POD");
|
|
||||||
BufferedWriter writer = new BufferedWriter(creator);
|
|
||||||
int Editpoints = (int) Double.parseDouble(editpointField.getValue().toString());
|
|
||||||
boolean isCover;
|
|
||||||
|
|
||||||
writer.write("[Podcast]\n");
|
|
||||||
writer.write("altfolder1=" + Folder.getText() + "\n");
|
|
||||||
writer.write("basename=" + Folder.getText() + "\n");
|
|
||||||
writer.write("audiobook=true" + "\n");
|
|
||||||
|
|
||||||
try {
|
|
||||||
File CoverFile = new File(Folder.getText() + "\\" + CoverField.getText());
|
|
||||||
|
|
||||||
CoverImage = ImageIO.read(CoverFile);
|
|
||||||
writer.write("artwork=" + CoverField.getText() + "\n");
|
|
||||||
writer.write("imgwidth=" + CoverImage.getWidth() + "\n");
|
|
||||||
writer.write("imgheight=" + CoverImage.getHeight() + "\n");
|
|
||||||
isCover = true;
|
|
||||||
} catch (IOException e) {
|
|
||||||
JOptionPane.showMessageDialog(this, selectedLanguage[12]);
|
|
||||||
isCover = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("editpointcount=" + Editpoints + "\n\n\n");
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 1; i <= Editpoints; i++) {
|
|
||||||
String Title = JOptionPane.showInputDialog(this, selectedLanguage[7] + i);
|
|
||||||
|
|
||||||
if (Title == null) {
|
|
||||||
throw new Exception("go");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("[Editpoint_" + i + "]\n");
|
|
||||||
|
|
||||||
if (isCover == true) {
|
|
||||||
writer.write("image=" + CoverField.getText() + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
File audioFile = new File(Folder.getText() + "\\" + Title + ".m4a");
|
|
||||||
|
|
||||||
try {
|
|
||||||
AudioFile af = AudioFileIO.read(audioFile);
|
|
||||||
|
|
||||||
System.out.println(af.getAudioHeader().getTrackLength() + "\n" + af.getFile().getName());
|
|
||||||
System.out.println("||");
|
|
||||||
writer.write("audiofile=" + Title + ".m4a\n");
|
|
||||||
writer.write("chapter=" + i + "\n");
|
|
||||||
writer.write("start="+time.asString()+".00" + "\n\n\n");
|
|
||||||
|
|
||||||
time.add(0, 0, af.getAudioHeader().getTrackLength());
|
|
||||||
|
|
||||||
} catch (CannotReadException exc) {
|
|
||||||
System.out.println("CannotReadException\n" + audioFile.exists());
|
|
||||||
} catch (IOException exc) {
|
|
||||||
System.out.println("IOException");
|
|
||||||
} catch (TagException exc) {
|
|
||||||
System.out.println("TagException");
|
|
||||||
} catch (ReadOnlyFileException exc) {
|
|
||||||
System.out.println("ReadOnlyFileException");
|
|
||||||
} catch (InvalidAudioFrameException exc) {
|
|
||||||
System.out.println("InvalidAudioFrameException");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
JOptionPane.showMessageDialog(null, selectedLanguage[8]);
|
|
||||||
System.exit(0);
|
|
||||||
} catch (Exception e) {
|
|
||||||
if (!e.getMessage().equals("go")) {
|
|
||||||
JOptionPane.showMessageDialog(null, selectedLanguage[9]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createMultiCD() {
|
|
||||||
try {
|
|
||||||
FileWriter creator = new FileWriter("Podcast.POD");
|
|
||||||
BufferedWriter writer = new BufferedWriter(creator);
|
|
||||||
int Editpoints = (int) Double.parseDouble(editpointField.getValue().toString());
|
|
||||||
boolean isCover;
|
|
||||||
|
|
||||||
writer.write("[Podcast]\n");
|
|
||||||
writer.write("altfolder1=" + Folder.getText() + "\n");
|
|
||||||
writer.write("basename=" + Folder.getText() + "\n");
|
|
||||||
|
|
||||||
try {
|
|
||||||
File CoverFile = new File(Folder.getText() + "\\" + CoverField.getText());
|
|
||||||
|
|
||||||
CoverImage = ImageIO.read(CoverFile);
|
|
||||||
writer.write("artwork=" + CoverField.getText() + "\n");
|
|
||||||
writer.write("imgwidth=" + CoverImage.getWidth() + "\n");
|
|
||||||
writer.write("imgheight=" + CoverImage.getHeight() + "\n");
|
|
||||||
isCover = true;
|
|
||||||
} catch (IOException e) {
|
|
||||||
JOptionPane.showMessageDialog(this, selectedLanguage[12]);
|
|
||||||
isCover = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("editpointcount=" + Editpoints + "\n\n\n\n\n\n");
|
|
||||||
|
|
||||||
String CDs = JOptionPane.showInputDialog(this, selectedLanguage[10]);
|
|
||||||
|
|
||||||
if (CDs == null) {
|
|
||||||
throw new Exception("go");
|
|
||||||
}
|
|
||||||
|
|
||||||
int CDNumber = (int) Double.parseDouble(CDs);
|
|
||||||
int i;
|
|
||||||
int allTracks[] = new int[1000];
|
|
||||||
|
|
||||||
for (i = 1; i <= CDNumber; i++) {
|
|
||||||
String Tracks = JOptionPane.showInputDialog(this, selectedLanguage[11] + i);
|
|
||||||
|
|
||||||
if (Tracks == null) {
|
|
||||||
throw new Exception("go");
|
|
||||||
}
|
|
||||||
|
|
||||||
allTracks[i - 1] = (int) Double.parseDouble(Tracks);
|
|
||||||
}
|
|
||||||
|
|
||||||
int i1;
|
|
||||||
int i2;
|
|
||||||
int i3 = 0;
|
|
||||||
|
|
||||||
for (i1 = 1; i1 <= CDNumber; i1++) {
|
|
||||||
for (i2 = 1; i2 <= allTracks[i1 - 1]; i2++) {
|
|
||||||
i3++;
|
|
||||||
writer.write("[Editpoint_" + i3 + "]\n");
|
|
||||||
|
|
||||||
if (isCover == true) {
|
|
||||||
writer.write("image=" + CoverField.getText() + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("audiofile=" + i1 + "-" + i2 + " " + Folder.getText() + ".m4a\n");
|
|
||||||
writer.write("chapter=" + i + "\n");
|
|
||||||
writer.write("start=" + "\n\n\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
JOptionPane.showMessageDialog(null, selectedLanguage[8]);
|
|
||||||
System.exit(0);
|
|
||||||
} catch (Exception e) {
|
|
||||||
if (!e.getMessage().equals("go")) {
|
|
||||||
JOptionPane.showMessageDialog(null, selectedLanguage[9]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
LAF.LAF.setLAF(LAF.LAF.Windows);
|
|
||||||
new audiobookMaker();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
@@ -1,385 +0,0 @@
|
|||||||
//~--- non-JDK imports --------------------------------------------------------
|
|
||||||
|
|
||||||
import Dating.Time;
|
|
||||||
|
|
||||||
import Exceptions.*;
|
|
||||||
|
|
||||||
import LAF.LAF;
|
|
||||||
|
|
||||||
import org.jaudiotagger.audio.*;
|
|
||||||
import org.jaudiotagger.audio.exceptions.*;
|
|
||||||
import org.jaudiotagger.tag.*;
|
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
import java.awt.image.*;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
import java.net.*;
|
|
||||||
|
|
||||||
import javax.imageio.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
import javax.swing.event.*;
|
|
||||||
|
|
||||||
public class audiobookMakerPro extends JFrame implements ListSelectionListener, ActionListener {
|
|
||||||
private static Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
|
||||||
static audiobookMakerPro maker;
|
|
||||||
private boolean hasImage = false;
|
|
||||||
private Time time = new Time(0, 0, 0);
|
|
||||||
|
|
||||||
// private JButton remove;
|
|
||||||
// private JButton up;
|
|
||||||
private BufferedImage Cover;
|
|
||||||
private String CoverName;
|
|
||||||
private JPanel buttonPanel;
|
|
||||||
private ButtonGroup chapterGroup;
|
|
||||||
private JButton chooseImage;
|
|
||||||
private JButton create;
|
|
||||||
private File[] files;
|
|
||||||
|
|
||||||
// private JButton down;
|
|
||||||
// private JList list;
|
|
||||||
// private DefaultListModel mod;
|
|
||||||
private int numberOfFiles;
|
|
||||||
|
|
||||||
// private JButton openFiles;
|
|
||||||
private JButton output;
|
|
||||||
private String outputFolder;
|
|
||||||
private JLabel selectedFolder;
|
|
||||||
private JLabel selectedImage;
|
|
||||||
private JRadioButton typeSelf;
|
|
||||||
private JRadioButton useFilenames;
|
|
||||||
private JRadioButton useNumbers;
|
|
||||||
|
|
||||||
public audiobookMakerPro() {
|
|
||||||
this("iPod Audiobook Maker");
|
|
||||||
}
|
|
||||||
|
|
||||||
public audiobookMakerPro(String s) {
|
|
||||||
super(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initComponents() {
|
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
this.setIconImage(new ImageIcon(this.getClass().getResource("/Data\\icon.gif")).getImage());
|
|
||||||
setLayout(new FlowLayout());
|
|
||||||
|
|
||||||
// mod = new DefaultListModel();
|
|
||||||
// list = new JList(mod);
|
|
||||||
// list.addListSelectionListener(this);
|
|
||||||
// list.setVisibleRowCount(20);
|
|
||||||
JPanel labelPanel = new JPanel(new FlowLayout());
|
|
||||||
|
|
||||||
selectedFolder = new JLabel("Ordner: <Keiner> -");
|
|
||||||
selectedImage = new JLabel("Cover: <Keins>");
|
|
||||||
labelPanel.add(selectedFolder);
|
|
||||||
labelPanel.add(selectedImage);
|
|
||||||
buttonPanel = new JPanel(new GridLayout(0, 1));
|
|
||||||
|
|
||||||
// openFiles = new JButton("Öffnen");
|
|
||||||
// up = new JButton("Hoch");
|
|
||||||
// down = new JButton("Runter");
|
|
||||||
// remove = new JButton("Entfernen");
|
|
||||||
chooseImage = new JButton("Cover auswählen");
|
|
||||||
output = new JButton("Ordner");
|
|
||||||
create = new JButton(".POD Datei erstellen");
|
|
||||||
chapterGroup = new ButtonGroup();
|
|
||||||
useNumbers = new JRadioButton("Kapitel durchnummerieren", true);
|
|
||||||
useFilenames = new JRadioButton("Dateinamen als Kapitelnamen verwenden", false);
|
|
||||||
typeSelf = new JRadioButton("Kapitel selber benennen", false);
|
|
||||||
output.setToolTipText(
|
|
||||||
"<html><head></head><body><b>Der Name des Unterordners im Slideshow Assembler-Verzeichnis</b>, in dem die Audiodateien liegen<br />und in dem die .POD Datei und die .m4b Datei gespeichert werden sollen</body></html>");
|
|
||||||
chooseImage.setToolTipText("Der Name der Bilddatei im \"Ordner\", die als Cover verwendet werden soll");
|
|
||||||
useNumbers.setToolTipText("Die Namen der Kapitel werden \"001, 002, ...\" genannt");
|
|
||||||
useFilenames.setToolTipText(
|
|
||||||
"<html><head></head><body>Die Namen der Kapitel werden nach den Namen der dazugehörigen Dateien benannt.<br>"
|
|
||||||
+ "Oft werden die Namen dadurch <b>besonders lang</b>.</body></html>");
|
|
||||||
typeSelf.setToolTipText("Kapitelnamen selber angeben");
|
|
||||||
|
|
||||||
// openFiles.addActionListener(this);
|
|
||||||
// remove.addActionListener(this);
|
|
||||||
chooseImage.addActionListener(this);
|
|
||||||
output.addActionListener(this);
|
|
||||||
create.addActionListener(this);
|
|
||||||
chapterGroup.add(useNumbers);
|
|
||||||
chapterGroup.add(useFilenames);
|
|
||||||
chapterGroup.add(typeSelf);
|
|
||||||
|
|
||||||
// buttonPanel.add(openFiles);
|
|
||||||
// buttonPanel.add(up);
|
|
||||||
// buttonPanel.add(down);
|
|
||||||
// buttonPanel.add(remove);
|
|
||||||
buttonPanel.add(labelPanel);
|
|
||||||
buttonPanel.add(output);
|
|
||||||
buttonPanel.add(chooseImage);
|
|
||||||
buttonPanel.add(create);
|
|
||||||
buttonPanel.add(useNumbers);
|
|
||||||
buttonPanel.add(useFilenames);
|
|
||||||
buttonPanel.add(typeSelf);
|
|
||||||
|
|
||||||
try {
|
|
||||||
String file = this.getClass().getResource("/Readme.html").getPath();
|
|
||||||
|
|
||||||
file = file.replaceAll("%20", " ");
|
|
||||||
file = file.replaceFirst("/", " ");
|
|
||||||
System.out.println(file);
|
|
||||||
|
|
||||||
if (new File(file).exists()) {
|
|
||||||
try{
|
|
||||||
buttonPanel.add(new frame.JLink(new File(file), "Readme und Tutorial öffnen", Color.BLUE));
|
|
||||||
}
|
|
||||||
catch(IOException exc){
|
|
||||||
JOptionPane.showMessageDialog(null, "IO");
|
|
||||||
throw new FileNotFoundException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* if(new File(this.getClass().getResource("/Test/Bild.jpg").getFile()).exists()){
|
|
||||||
* / buttonPanel.add(new frame.JLink(new File(this.getClass().getResource("/Test/Bild.jpg").getFile()), "Readme öffnen", Color.BLUE));
|
|
||||||
* buttonPanel.add(new frame.JLink(new File("C:/Documents and Settings/Kim/Desktop/Java/Audiobook Maker/build/classes/Test/Bild.jpg"), "Readme öffnen", Color.BLUE));
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
else {
|
|
||||||
throw new FileNotFoundException();
|
|
||||||
}
|
|
||||||
} catch (FileNotFoundException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Readme wech");
|
|
||||||
}
|
|
||||||
|
|
||||||
// add(new JScrollPane(list));
|
|
||||||
add(buttonPanel);
|
|
||||||
pack();
|
|
||||||
setLocation((ScreenSize.width - getWidth()) / 2, (ScreenSize.height - getHeight()) / 2);
|
|
||||||
setResizable(true);
|
|
||||||
setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String castFileToListEntry(File f) {
|
|
||||||
String s = "<html><head></head><body><b>" + f.getName() + "</b><br />|->" + f.getAbsolutePath()
|
|
||||||
+ "</body></html>";
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* public void addFilesToList(File[] files) {
|
|
||||||
* for (int i = 0; i < files.length; i++) {
|
|
||||||
* addFileToList(files[i]);
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* public void addFileToList(File f) {
|
|
||||||
* this.mod.add(this.numberOfFiles, castFileToListEntry(f));
|
|
||||||
* files[numberOfFiles] = f;
|
|
||||||
* numberOfFiles++;
|
|
||||||
* this.list.repaint();
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
public static void main(String[] args) {
|
|
||||||
LAF.setLAF(LAF.Mac);
|
|
||||||
maker = new audiobookMakerPro();
|
|
||||||
maker.initComponents();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void valueChanged(ListSelectionEvent evt) {}
|
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
|
|
||||||
|
|
||||||
if (e.getActionCommand().equals("Ordner")) {
|
|
||||||
outputFolder = JOptionPane.showInputDialog(null, "Bitte Namen des Ordners angeben", "Eingabe",
|
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
|
||||||
|
|
||||||
try {
|
|
||||||
File f = new File(outputFolder);
|
|
||||||
|
|
||||||
if (!f.exists() ||!f.isDirectory()) {
|
|
||||||
throw new FolderException();
|
|
||||||
}
|
|
||||||
|
|
||||||
files = f.listFiles(new FileFilter() {
|
|
||||||
public boolean accept(File pathname) {
|
|
||||||
return pathname.getName().endsWith(".m4a");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
selectedFolder.setText("Ordner: " + outputFolder + " -");
|
|
||||||
selectedFolder.repaint();
|
|
||||||
} catch (FolderException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Ordner wurde nicht gefunden", "Fehler", JOptionPane.ERROR_MESSAGE);
|
|
||||||
outputFolder = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.getActionCommand().equals("Cover auswählen")) {
|
|
||||||
if (outputFolder != null) {
|
|
||||||
String s = JOptionPane.showInputDialog(null, "Bitte Namen der Bilddatei eingeben", "Eingabe",
|
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (s == null) {
|
|
||||||
throw new IOException("go");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!s.toLowerCase().endsWith(".jpg")) {
|
|
||||||
if (!s.toLowerCase().endsWith(".png")) {
|
|
||||||
throw new EndingException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Cover = ImageIO.read(new File(outputFolder + "\\" + s));
|
|
||||||
this.hasImage = true;
|
|
||||||
selectedImage.setText("Cover: " + s);
|
|
||||||
} catch (IOException exc) {
|
|
||||||
if (!exc.getMessage().equals("go")) {
|
|
||||||
Cover = null;
|
|
||||||
JOptionPane.showMessageDialog(null, "Bilddatei wurde nicht gefunden", "Fehler",
|
|
||||||
JOptionPane.WARNING_MESSAGE);
|
|
||||||
this.hasImage = false;
|
|
||||||
}
|
|
||||||
} catch (EndingException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Das Cover muss eine .jpg oder .png Datei sein", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
Cover = null;
|
|
||||||
this.hasImage = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Cover != null) {
|
|
||||||
this.hasImage = true;
|
|
||||||
this.CoverName = s;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
JOptionPane.showMessageDialog(null, "Bitte geben sie zuerst einen Ausgabeordner an", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.getActionCommand().equals(".POD Datei erstellen")) {
|
|
||||||
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (outputFolder == null) {
|
|
||||||
throw new NoFolderSelectedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (files == null) {
|
|
||||||
throw new NoFilesSelectedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasImage) {
|
|
||||||
if (JOptionPane.showConfirmDialog(null,
|
|
||||||
"Es wurde kein Cover ausgewählt.\nDatei trotzdem erstellen?",
|
|
||||||
"Kein Cover", JOptionPane.YES_OPTION) == JOptionPane.NO_OPTION) {
|
|
||||||
throw new EndingException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
FileWriter fWriter = new FileWriter(outputFolder + "\\Podcast.POD");
|
|
||||||
BufferedWriter writer = new BufferedWriter(fWriter);
|
|
||||||
|
|
||||||
writer.write("[Podcast]\n");
|
|
||||||
writer.write("altfolder1=" + outputFolder + "\n");
|
|
||||||
writer.write("basename=" + outputFolder + "\n");
|
|
||||||
writer.write("audiobook=true" + "\n");
|
|
||||||
|
|
||||||
if (this.hasImage) {
|
|
||||||
writer.write("artwork=" + CoverName + "\n");
|
|
||||||
writer.write("imgwidth=" + Cover.getWidth() + "\n");
|
|
||||||
writer.write("imgheight=" + Cover.getHeight() + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("editpointcount=" + files.length + "\n\n\n");
|
|
||||||
|
|
||||||
for (i = 0; i < files.length; i++) {
|
|
||||||
writer.write("[Editpoint_" + (i + 1) + "]\n");
|
|
||||||
|
|
||||||
if (this.hasImage) {
|
|
||||||
writer.write("image=" + CoverName + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("audiofile=" + files[i].getName() + "\n");
|
|
||||||
|
|
||||||
if (useNumbers.isSelected()) {
|
|
||||||
writer.write("chapter=");
|
|
||||||
|
|
||||||
if ((i + 1) < 100) {
|
|
||||||
writer.write("0");
|
|
||||||
|
|
||||||
if ((i + 1) < 10) {
|
|
||||||
writer.write("0");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write((i + 1) + "\n");
|
|
||||||
} else if (useFilenames.isSelected()) {
|
|
||||||
writer.write("chapter=" + files[i].getName() + "\n");
|
|
||||||
} else if (typeSelf.isSelected()) {
|
|
||||||
String s = JOptionPane.showInputDialog(null,
|
|
||||||
"Kapitelname der Datei " + files[i].getName() + " angeben (" + (i + 1)
|
|
||||||
+ " von " + files.length + ")", "Kapitelnamen eingeben",
|
|
||||||
JOptionPane.PLAIN_MESSAGE);
|
|
||||||
|
|
||||||
if (s == null) {
|
|
||||||
throw new EndingException();
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("chapter=" + s + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.write("start=" + time.asString() + ".00\n\n");
|
|
||||||
|
|
||||||
AudioFile af = AudioFileIO.read(files[i]);
|
|
||||||
|
|
||||||
time.add(0, 0, af.getAudioHeader().getTrackLength());
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.close();
|
|
||||||
JOptionPane.showMessageDialog(null, "Fertig!\nDas Program schließt automatisch", "Fertig",
|
|
||||||
JOptionPane.INFORMATION_MESSAGE);
|
|
||||||
System.exit(0);
|
|
||||||
} catch (CannotReadException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null,
|
|
||||||
"<html><head></head><body>Die Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>konnte nicht gelesen werden</body></html>", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (TagException exc) {
|
|
||||||
JOptionPane.showMessageDialog(
|
|
||||||
null,
|
|
||||||
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (ReadOnlyFileException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null,
|
|
||||||
"<html><head></head><body>Die Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>ist eine Read-Only Datei</body></html>", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (InvalidAudioFrameException exc) {
|
|
||||||
JOptionPane.showMessageDialog(
|
|
||||||
null,
|
|
||||||
"<html><head></head><body>Es ist ein unbekannter Fehler bei der Datei<br><b>" + files[i]
|
|
||||||
+ "</b><br>aufgetreten</body></html>", "Fehler", JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (IOException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Es ist ein unbekannter Fehler aufgetreten", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
|
||||||
} catch (NoFolderSelectedException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Bitte wählen sie einen Ausgabeordner an", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (NoFilesSelectedException exc) {
|
|
||||||
JOptionPane.showMessageDialog(null, "Es wurden keine Dateien ausgewählt", "Fehler",
|
|
||||||
JOptionPane.ERROR_MESSAGE);
|
|
||||||
} catch (EndingException exc) {}
|
|
||||||
|
|
||||||
this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
@@ -1,150 +0,0 @@
|
|||||||
package frame;
|
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.awt.event.*;
|
|
||||||
|
|
||||||
import java.net.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
public class JHyperLink extends JLabel implements MouseListener {
|
|
||||||
public Cursor Rollover_Cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
|
|
||||||
public Color LINK_COLOR;
|
|
||||||
public URI uri;
|
|
||||||
|
|
||||||
public JHyperLink() {}
|
|
||||||
|
|
||||||
public JHyperLink(String url) throws URISyntaxException {
|
|
||||||
super(url);
|
|
||||||
LINK_COLOR = Color.BLUE;
|
|
||||||
this.setForeground(LINK_COLOR);
|
|
||||||
uri = new URI(url);
|
|
||||||
this.addMouseListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JHyperLink(String url, Color color) throws URISyntaxException {
|
|
||||||
super(url);
|
|
||||||
LINK_COLOR = color;
|
|
||||||
this.setForeground(LINK_COLOR);
|
|
||||||
uri = new URI(url);
|
|
||||||
this.addMouseListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JHyperLink(String url, String title) throws URISyntaxException {
|
|
||||||
super(title);
|
|
||||||
this.LINK_COLOR = Color.BLUE;
|
|
||||||
this.setForeground(LINK_COLOR);
|
|
||||||
uri = new URI(url);
|
|
||||||
this.addMouseListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public JHyperLink(String url, String title, Color color) throws URISyntaxException {
|
|
||||||
super(title);
|
|
||||||
LINK_COLOR = color;
|
|
||||||
this.setForeground(LINK_COLOR);
|
|
||||||
uri = new URI(url);
|
|
||||||
this.addMouseListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setEnabled(boolean enabled) {
|
|
||||||
super.setEnabled(enabled);
|
|
||||||
|
|
||||||
if (enabled == true) {
|
|
||||||
MouseListener[] listeners = this.getMouseListeners();
|
|
||||||
|
|
||||||
try {
|
|
||||||
MouseListener listener = listeners[0];
|
|
||||||
} catch (Exception exc) {
|
|
||||||
this.addMouseListener(new JHyperLink());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enabled == false) {
|
|
||||||
MouseListener[] listeners = this.getMouseListeners();
|
|
||||||
|
|
||||||
for (int i = 0; ; i++) {
|
|
||||||
try {
|
|
||||||
MouseListener listener = listeners[i];
|
|
||||||
|
|
||||||
this.removeMouseListener(listener);
|
|
||||||
} catch (Exception exc) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(Color color) {
|
|
||||||
this.LINK_COLOR = color;
|
|
||||||
super.setForeground(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(int r, int g, int b) {
|
|
||||||
Color color = new Color(r, g, b);
|
|
||||||
|
|
||||||
this.setColor(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setColor(int r, int g, int b, int a) {
|
|
||||||
Color color = new Color(r, g, b, a);
|
|
||||||
|
|
||||||
this.setColor(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color getColor() {
|
|
||||||
return this.LINK_COLOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setURI(URI uri) {
|
|
||||||
this.uri = uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setURI(String uri) throws URISyntaxException {
|
|
||||||
this.uri = new URI(uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
public URI getURI() {
|
|
||||||
return this.uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setText(String text, Color color) {
|
|
||||||
super.setText(text);
|
|
||||||
this.setColor(color);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setText(String text, int r, int g, int b) {
|
|
||||||
super.setText(text);
|
|
||||||
this.setColor(r, g, b);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setText(String text, int r, int g, int b, int a) {
|
|
||||||
super.setText(text);
|
|
||||||
this.setColor(r, g, b, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
|
||||||
JHyperLink link = (JHyperLink) e.getComponent();
|
|
||||||
|
|
||||||
try {
|
|
||||||
Desktop.getDesktop().browse(link.uri);
|
|
||||||
} catch (java.io.IOException exc) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mousePressed(MouseEvent e) {}
|
|
||||||
|
|
||||||
public void mouseReleased(MouseEvent e) {}
|
|
||||||
|
|
||||||
public void mouseEntered(MouseEvent e) {
|
|
||||||
JHyperLink link = (JHyperLink) e.getComponent();
|
|
||||||
|
|
||||||
link.setCursor(link.Rollover_Cursor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseExited(MouseEvent e) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
package frame;
|
|
||||||
|
|
||||||
import java.awt.event.*;
|
|
||||||
import javax.swing.*;
|
|
||||||
import java.io.*;
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
|
|
||||||
public class JLink extends JLabel{
|
|
||||||
|
|
||||||
public File file;
|
|
||||||
public Color LINK_COLOR;
|
|
||||||
public Cursor Rollover_Cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public JLink(){
|
|
||||||
this(Color.RED);
|
|
||||||
}
|
|
||||||
public JLink(Color color){
|
|
||||||
super();
|
|
||||||
this.LINK_COLOR = color;
|
|
||||||
this.setForeground(LINK_COLOR);
|
|
||||||
this.file = null;
|
|
||||||
}
|
|
||||||
public JLink(String file)throws FileNotFoundException{
|
|
||||||
this(new File(file), file, Color.RED);
|
|
||||||
}
|
|
||||||
public JLink(String file, Color color)throws FileNotFoundException{
|
|
||||||
this(new File(file), file, color);
|
|
||||||
}
|
|
||||||
public JLink(String file, String title)throws FileNotFoundException{
|
|
||||||
this(new File(file), title, Color.RED);
|
|
||||||
}
|
|
||||||
public JLink(String file, String title, Color color)throws FileNotFoundException{
|
|
||||||
this(new File(file), title, color);
|
|
||||||
}
|
|
||||||
public JLink(File file)throws FileNotFoundException{
|
|
||||||
this(file, file.getAbsolutePath(), Color.RED);
|
|
||||||
}
|
|
||||||
public JLink(File file, Color color)throws FileNotFoundException{
|
|
||||||
this(file, file.getAbsolutePath(), color);
|
|
||||||
}
|
|
||||||
public JLink(File file, String title)throws FileNotFoundException{
|
|
||||||
this(file, title, Color.RED);
|
|
||||||
}
|
|
||||||
public JLink(File file, String title, Color color)throws FileNotFoundException{
|
|
||||||
super(title);
|
|
||||||
this.LINK_COLOR = color;
|
|
||||||
this.setForeground(LINK_COLOR);
|
|
||||||
this.file = file;
|
|
||||||
this.addMouseListener(new Linklistener());
|
|
||||||
if(this.file.exists() == false){throw new FileNotFoundException();}
|
|
||||||
}
|
|
||||||
public void setCursor(Cursor cursor){
|
|
||||||
this.Rollover_Cursor = cursor;
|
|
||||||
super.setCursor(cursor);
|
|
||||||
}
|
|
||||||
public File getFile(){
|
|
||||||
return this.file;
|
|
||||||
}
|
|
||||||
public void setFile(File file)throws IOException{
|
|
||||||
if(file.exists()){this.file = file;}
|
|
||||||
else {
|
|
||||||
this.file = null;
|
|
||||||
throw new IOException();
|
|
||||||
}
|
|
||||||
if(this.isEnabled() == true){
|
|
||||||
MouseListener[] listeners = this.getMouseListeners();
|
|
||||||
try{
|
|
||||||
MouseListener listener = listeners[0];
|
|
||||||
}
|
|
||||||
catch(Exception exc){
|
|
||||||
this.addMouseListener(new Linklistener());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setFile(String file)throws IOException{
|
|
||||||
if(new File(file).exists()){this.file = new File(file);}
|
|
||||||
else {
|
|
||||||
this.file = null;
|
|
||||||
throw new IOException();
|
|
||||||
}
|
|
||||||
if(this.isEnabled() == true){
|
|
||||||
MouseListener[] listeners = this.getMouseListeners();
|
|
||||||
try{
|
|
||||||
MouseListener listener = listeners[0];
|
|
||||||
}
|
|
||||||
catch(Exception exc){
|
|
||||||
this.addMouseListener(new Linklistener());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setColor(Color color){
|
|
||||||
this.LINK_COLOR = color;
|
|
||||||
super.setForeground(color);
|
|
||||||
}
|
|
||||||
public void setColor(int r, int g, int b){
|
|
||||||
Color color = new Color(r, g, b);
|
|
||||||
this.setColor(color);
|
|
||||||
}
|
|
||||||
public void setColor(int r, int g, int b, int a){
|
|
||||||
Color color = new Color(r, g, b, a);
|
|
||||||
this.setColor(color);
|
|
||||||
}
|
|
||||||
public Color getColor(){
|
|
||||||
return this.LINK_COLOR;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public void setEnabled(boolean enabled){
|
|
||||||
super.setEnabled(enabled);
|
|
||||||
if(enabled == true){
|
|
||||||
MouseListener[] listeners = this.getMouseListeners();
|
|
||||||
try{
|
|
||||||
MouseListener listener = listeners[0];
|
|
||||||
}
|
|
||||||
catch(Exception exc){
|
|
||||||
this.addMouseListener(new Linklistener());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(enabled == false){
|
|
||||||
MouseListener[] listeners = this.getMouseListeners();
|
|
||||||
for(int i = 0;; i++){
|
|
||||||
try{
|
|
||||||
MouseListener listener = listeners[i];
|
|
||||||
this.removeMouseListener(listener);
|
|
||||||
}
|
|
||||||
catch(Exception exc){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public void setText(String text, Color color){
|
|
||||||
super.setText(text);
|
|
||||||
this.setColor(color);
|
|
||||||
}
|
|
||||||
public void setText(String text, int r, int g, int b){
|
|
||||||
super.setText(text);
|
|
||||||
this.setColor(r, g, b);
|
|
||||||
}
|
|
||||||
public void setText(String text, int r, int g, int b, int a){
|
|
||||||
super.setText(text);
|
|
||||||
this.setColor(r, g, b, a);
|
|
||||||
}
|
|
||||||
protected void click(MouseEvent e){
|
|
||||||
JLink link = (JLink)e.getComponent();
|
|
||||||
try{
|
|
||||||
Desktop.getDesktop().open(link.file);
|
|
||||||
}
|
|
||||||
catch(java.io.IOException exc){}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class Linklistener implements MouseListener{
|
|
||||||
|
|
||||||
public void mouseClicked(MouseEvent e) {
|
|
||||||
JLink temp = (JLink)e.getComponent();
|
|
||||||
temp.click(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mousePressed(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseReleased(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseEntered(MouseEvent e) {
|
|
||||||
JLink link = (JLink)e.getComponent();
|
|
||||||
link.setCursor(link.Rollover_Cursor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mouseExited(MouseEvent e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
package frame;
|
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
|
|
||||||
import javax.swing.*;
|
|
||||||
|
|
||||||
public class JScreenLine extends Component {
|
|
||||||
private JSeparator sep = new JSeparator(JSeparator.HORIZONTAL);
|
|
||||||
private Component leftComp;
|
|
||||||
private JProgressBar progressBar;
|
|
||||||
private JFrame superFrame;
|
|
||||||
|
|
||||||
public JScreenLine(boolean withProgressBar) {
|
|
||||||
if (withProgressBar) {
|
|
||||||
this.progressBar = new JProgressBar();
|
|
||||||
} else {}
|
|
||||||
}
|
|
||||||
|
|
||||||
public JProgressBar getProgressBar() {
|
|
||||||
return progressBar;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setProgressBarWidth(int width) {
|
|
||||||
this.progressBar.setSize(width, 19);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLeftComp(Component c) {
|
|
||||||
leftComp = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Component getLeftComp() {
|
|
||||||
return leftComp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeProgressBar() {
|
|
||||||
this.progressBar = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeLeftComp() {
|
|
||||||
this.leftComp = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void paint(Graphics g) {
|
|
||||||
sep.setBounds(0, this.getParent().getHeight() - 22, this.getParent().getWidth(), 10);
|
|
||||||
this.getParent().add(sep);
|
|
||||||
|
|
||||||
if (this.progressBar != null) {
|
|
||||||
this.progressBar.setBounds(this.getParent().getWidth() - this.progressBar.getWidth(),
|
|
||||||
this.getParent().getHeight() - this.progressBar.getHeight(), 150, 19);
|
|
||||||
this.getParent().add(this.progressBar);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (leftComp != null) {
|
|
||||||
int w = leftComp.getWidth();
|
|
||||||
|
|
||||||
leftComp.setBounds(0, this.getParent().getHeight() - 22, w, 22);
|
|
||||||
this.getParent().add(leftComp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//~ Formatted by Jindent --- http://www.jindent.com
|
|
||||||
BIN
ssa_setup105a.exe
Executable file
BIN
test/Image.bmp
Executable file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
test/Image.jpg
Executable file
|
After Width: | Height: | Size: 96 KiB |
BIN
test/Image.png
Executable file
|
After Width: | Height: | Size: 34 KiB |