Skip to content
Snippets Groups Projects
Commit 28f0d2ed authored by Patrick Herbers's avatar Patrick Herbers
Browse files

Initial commit for ProPro2023

parents
No related branches found
No related tags found
No related merge requests found
### IntelliJ IDEA ###
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/ProPro2023-LinAmpPlayer.iml" filepath="$PROJECT_DIR$/ProPro2023-LinAmpPlayer.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
LinAmpPlayer
============
*This is an exercise project for the course **Programmierung und Programmiersprachen**, SoSe 2023*
Use Git to download this project:
```bash
git clone https://git.noc.ruhr-uni-bochum.de/herbepdl/propro2023-linampplayer.git
```
Or clone using IntelliJ: `File -> New -> Project from Version Control`
package de.rub.LinAmpPlayer;
import java.util.ArrayList;
public class Album {
public String albumTitle; // album title
public String artist; // artist name
public ArrayList<Track> tracks = new ArrayList<>(); // tracks
public int length; // length of the album in seconds
public Album(String albumTitle, String artist) {
this.albumTitle = albumTitle;
this.artist = artist;
}
public String getDescription() {
return albumTitle + " by " + artist + " (" + getRuntimeString(length) + ")";
}
public void setLength(int hours, int minutes, int seconds) {
this.length = hours * 60 * 60 + minutes * 60 + seconds;
}
/**
* Updates the length of the album by calculating the sum of track lengths
* Developer Note: Call this after adding tracks!
*/
public void updateLength() {
this.length = 0;
for (Track track :
tracks) {
this.length += track.length;
}
}
/**
* Formats a time in seconds into a String with the format hh:mm:ss or mm:ss if hours = 0
* @param timeInSeconds The time in seconds
* @return The formatted String
*/
public static String getRuntimeString(int timeInSeconds) {
int tAbs = Math.abs(timeInSeconds);
if(timeInSeconds >= 60 * 60) {
int hours = Math.floorDiv(tAbs, 60 * 60);
int minutes = Math.floorDiv(tAbs % (60 * 60), 60);
int seconds = tAbs % 60;
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
} else {
int minutes = Math.floorDiv(tAbs, 60);
int seconds = tAbs % 60;
return String.format("%02d:%02d", minutes, seconds);
}
}
}
package de.rub.LinAmpPlayer;
public class Player {
public Player() {
System.out.println("\uD834\uDD60 LinAmpPlayer initialized \uD834\uDD60");
}
/**
* Plays a single track (blocking call).
* Mock implementation at 1000x speed.
* @param track The track to play.
*/
public void PlayTrack(Track track) {
try {
System.out.println("▶ (00:00/" + Track.getRuntimeString(track.length) + ") |o--------------| Now Playing: " + track.getDescription());
Thread.sleep(track.length);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
/**
* Plays all tracks on a given album (blocking call).
* @param album The album to play.
*/
public void PlayAlbum(Album album) {
System.out.println("\uD834\uDD60 Playing " + album.getDescription());
for (Track track: album.tracks) {
PlayTrack(track);
}
}
public static void main(String[] args) {
Album wywh = new Album("Wish You Were Here", "Pink Floyd");
wywh.tracks.add(new Track("Shine On You Crazy Diamond, Pts. 1-5", "Pink Floyd", "Wish You Were Here", 13*60+30));
wywh.tracks.add(new Track("Welcome To The Machine", "Pink Floyd", "Wish You Were Here", 7*60+33));
wywh.tracks.add(new Track("Have A Cigar", "Pink Floyd", "Wish You Were Here", 5*60+7));
wywh.tracks.add(new Track("Wish You Were Here", "Pink Floyd", "Wish You Were Here", 5*60+5));
wywh.tracks.add(new Track("Shine On You Crazy Diamond, Pts. 6-9", "Pink Floyd", "Wish You Were Here", 12*60+23));
wywh.updateLength();
Album lysf = new Album("Lift Your Skinny Fists Like Antennas to Heaven", "Godspeed You! Black Emperor");
lysf.tracks.add(new Track("Storm", "Godspeed You! Black Emperor", "Wish You Were Here", 22*60+32));
lysf.tracks.add(new Track("Static", "Godspeed You! Black Emperor", "Wish You Were Here", 22*60+35));
lysf.tracks.add(new Track("Sleep", "Godspeed You! Black Emperor", "Wish You Were Here", 23*60+17));
lysf.tracks.add(new Track("Like Antennas To Heaven...", "Godspeed You! Black Emperor", "Wish You Were Here", 18*60+57));
lysf.updateLength();
Player player = new Player();
player.PlayAlbum(wywh);
player.PlayAlbum(lysf);
}
}
package de.rub.LinAmpPlayer;
import java.util.ArrayList;
public class Track {
public String trackTitle; // album title
public String artist; // track artist
public String album; // track album
public int length; // length of the track in seconds
public Track(String trackTitle, String artist, String album, int length) {
this.trackTitle = trackTitle;
this.artist = artist;
this.album = album;
this.length = length;
}
public void setLength(int hours, int minutes, int seconds) {
this.length = hours * 60 * 60 + minutes * 60 + seconds;
}
public String getDescription() {
return artist + " - " + trackTitle + " (" + getRuntimeString(length) + ")";
}
/**
* Formats a time in seconds into a String with the format hh:mm:ss or mm:ss if hours = 0
* @param timeInSeconds The time in seconds
* @return The formatted String
*/
public static String getRuntimeString(int timeInSeconds) {
int tAbs = Math.abs(timeInSeconds);
if(timeInSeconds >= 60 * 60) {
int hours = Math.floorDiv(tAbs, 60 * 60);
int minutes = Math.floorDiv(tAbs % (60 * 60), 60);
int seconds = tAbs % 60;
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
} else {
int minutes = Math.floorDiv(tAbs, 60);
int seconds = tAbs % 60;
return String.format("%02d:%02d", minutes, seconds);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment