Changeset 1434 for trunk/src/org/apollo/widgets/SampledTrack.java
- Timestamp:
- 10/02/19 14:19:48 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/apollo/widgets/SampledTrack.java
r1179 r1434 23 23 import javax.sound.sampled.LineUnavailableException; 24 24 import javax.sound.sampled.UnsupportedAudioFileException; 25 import javax.swing.JSlider; 25 26 import javax.swing.SwingUtilities; 26 27 … … 70 71 import org.expeditee.gui.FrameIO; 71 72 import org.expeditee.gui.PopupManager; 73 import org.expeditee.gui.management.ResourceManager; 72 74 import org.expeditee.items.ItemParentStateChangedEvent; 73 75 import org.expeditee.items.ItemUtils; … … 401 403 402 404 }); 403 405 404 406 fulltrackView.addKeyListener(new KeyListener() { 405 407 406 408 @Override 407 public void keyPressed(KeyEvent e) 408 { 409 public void keyPressed(KeyEvent e) { 409 410 } 410 411 411 412 @Override 412 public void keyReleased(KeyEvent e) 413 { 413 public void keyReleased(KeyEvent e) { 414 415 // On 26th September, Bryce added P M + - keys to play/pause/resume, mute and adjust volume. 416 if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_P) { 417 try { 418 playbackControlPopup.playPauseResume(); 419 } catch (LineUnavailableException e1) { 420 e1.printStackTrace(); 421 } 422 } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_M) { 423 boolean selected = playbackControlPopup.muteButton.isSelected(); 424 playbackControlPopup.muteButton.setSelected(!selected); 425 playbackControlPopup.muteChanged(); 426 } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_SUBTRACT) { 427 JSlider volumeSlider = playbackControlPopup.volumeSlider; 428 int delta = Math.round(((float) (volumeSlider.getMaximum() - volumeSlider.getMinimum())) / 10f); 429 int newVolume = Math.max(volumeSlider.getValue() - delta, volumeSlider.getMinimum()); 430 volumeSlider.setValue(newVolume); 431 playbackControlPopup.volumeChanged(); 432 } else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ADD) { 433 JSlider volumeSlider = playbackControlPopup.volumeSlider; 434 int delta = Math.round(((float) (volumeSlider.getMaximum() - volumeSlider.getMinimum())) / 10f); 435 int newVolume = Math.min(volumeSlider.getValue() + delta, volumeSlider.getMaximum()); 436 volumeSlider.setValue(newVolume); 437 playbackControlPopup.volumeChanged(); 438 } 439 414 440 // Toggle pitch-track indexing 415 if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_I) {441 else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_I) { 416 442 setShouldOmitIndexAudio(!shouldOmitIndexAudio()); 417 443 DisplayController.requestRefresh(true); … … 765 791 setLoadScreenMessage("Loading audio file..."); 766 792 767 f = new File( 768 AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName); 793 //f = new File( 794 // AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName); 795 f = ResourceManager.getAudioResource(localFileName, getParentFrame()); 769 796 } 770 797 … … 809 836 // If recovering - might be recovering an existing track that had been 810 837 // saved to the repository .. thus re-use the old file 811 trackModel.setFilepath(AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName); 838 File audioResource = ResourceManager.getAudioResource(localFileName, getParentFrame()); 839 trackModel.setFilepath(audioResource.getAbsolutePath()); 812 840 } 813 841 … … 940 968 // If saving for the file time then get a filename 941 969 if (trackModel.getFilepath() == null) { 942 trackModel.setFilepath(AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName); 970 File audioResource = ResourceManager.getAudioResource(localFileName, DisplayController.getCurrentFrame()); 971 trackModel.setFilepath(audioResource.getAbsolutePath()); 943 972 loadFilenameArgument = localFileName; // set to now local, next load will be local 944 973 } … … 1029 1058 1030 1059 // Get rid of local file 1031 File oldLocalFile = new File(AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName); 1060 //File oldLocalFile = new File(AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName); 1061 File oldLocalFile = ResourceManager.getAudioResource(localFileName, getParentFrame()); 1032 1062 if (oldLocalFile.isFile() && oldLocalFile.exists()) { 1033 1063 try { … … 1157 1187 return recoveryFile.getAbsolutePath(); 1158 1188 } 1159 1160 return AudioPathManager.AUDIO_HOME_DIRECTORY + localFileName; 1189 1190 File audioResource = ResourceManager.getAudioResource(localFileName, getParentFrame()); 1191 return audioResource.getAbsolutePath(); 1161 1192 1162 1193 … … 2005 2036 try { 2006 2037 2007 if (!SoundDesk.getInstance().isPlaying(trackMix.getChannelID())) { // play / resume 2008 2009 int startFrame = -1, endFrame = -1; 2010 2011 // Resume playback? 2012 if (SoundDesk.getInstance().isPaused(trackMix.getChannelID())) { 2013 startFrame = SoundDesk.getInstance().getLastPlayedFramePosition(trackMix.getChannelID()); 2014 if (startFrame >= 0 && startFrame < trackModel.getFrameCount()) { 2015 2016 // The user may have edited the audio track and reselected it 2017 // since the last pause. Thus select an appropriate end frame 2018 endFrame = (trackModel.getSelectionLength() > 1) ? 2019 trackModel.getSelectionStart() + trackModel.getSelectionLength(): 2020 trackModel.getFrameCount() - 1; 2021 2022 // Changed selection? it play range invalid? 2023 if (endFrame <= startFrame || startFrame < trackModel.getSelectionStart()) { 2024 startFrame = -1; // Play new selection (see below) 2025 2026 } else if (endFrame >= trackModel.getFrameCount()) { 2027 endFrame = trackModel.getFrameCount() - 1; 2028 } 2029 2030 } 2031 } 2032 2033 // Play from beginning of selection to end of selection 2034 if (startFrame < 0) { 2035 startFrame = trackModel.getSelectionStart(); 2036 endFrame = (trackModel.getSelectionLength() > 1) ? 2037 startFrame + trackModel.getSelectionLength(): 2038 trackModel.getFrameCount() - 1; 2039 } 2040 2041 // Safety clamp: 2042 if (endFrame >= trackModel.getFrameCount()) { 2043 endFrame = trackModel.getFrameCount() - 1; 2044 } 2045 2046 if (startFrame < endFrame) { 2047 SoundDesk.getInstance().playSampledTrackModel( 2048 trackModel, 2049 trackMix.getChannelID(), 2050 startFrame, 2051 endFrame, 2052 0); 2053 } 2054 2055 } else { // pause 2056 2057 TrackSequence ts = SoundDesk.getInstance().getTrackSequence(trackMix.getChannelID()); 2058 2059 if (ts != null && 2060 ts.isPlaying()) { 2061 2062 // Mark channel as paused. 2063 SoundDesk.getInstance().setPaused(trackMix.getChannelID(), true); 2064 2065 // Stop playback for this channel 2066 ApolloPlaybackMixer.getInstance().stop(ts); 2067 2068 } 2069 2070 } 2038 playPauseResume(); 2071 2039 2072 2040 } catch (LineUnavailableException e1) { … … 2094 2062 } else if (e.getSource() == miscButton) { 2095 2063 expand(false); 2064 } 2065 } 2066 2067 private void playPauseResume() throws LineUnavailableException { 2068 if (!SoundDesk.getInstance().isPlaying(trackMix.getChannelID())) { // play / resume 2069 2070 int startFrame = -1, endFrame = -1; 2071 2072 // Resume playback? 2073 if (SoundDesk.getInstance().isPaused(trackMix.getChannelID())) { 2074 startFrame = SoundDesk.getInstance().getLastPlayedFramePosition(trackMix.getChannelID()); 2075 if (startFrame >= 0 && startFrame < trackModel.getFrameCount()) { 2076 2077 // The user may have edited the audio track and reselected it 2078 // since the last pause. Thus select an appropriate end frame 2079 endFrame = (trackModel.getSelectionLength() > 1) ? 2080 trackModel.getSelectionStart() + trackModel.getSelectionLength(): 2081 trackModel.getFrameCount() - 1; 2082 2083 // Changed selection? it play range invalid? 2084 if (endFrame <= startFrame || startFrame < trackModel.getSelectionStart()) { 2085 startFrame = -1; // Play new selection (see below) 2086 2087 } else if (endFrame >= trackModel.getFrameCount()) { 2088 endFrame = trackModel.getFrameCount() - 1; 2089 } 2090 2091 } 2092 } 2093 2094 // Play from beginning of selection to end of selection 2095 if (startFrame < 0) { 2096 startFrame = trackModel.getSelectionStart(); 2097 endFrame = (trackModel.getSelectionLength() > 1) ? 2098 startFrame + trackModel.getSelectionLength(): 2099 trackModel.getFrameCount() - 1; 2100 } 2101 2102 // Safety clamp: 2103 if (endFrame >= trackModel.getFrameCount()) { 2104 endFrame = trackModel.getFrameCount() - 1; 2105 } 2106 2107 if (startFrame < endFrame) { 2108 SoundDesk.getInstance().playSampledTrackModel( 2109 trackModel, 2110 trackMix.getChannelID(), 2111 startFrame, 2112 endFrame, 2113 0); 2114 } 2115 2116 } else { // pause 2117 2118 TrackSequence ts = SoundDesk.getInstance().getTrackSequence(trackMix.getChannelID()); 2119 2120 if (ts != null && 2121 ts.isPlaying()) { 2122 2123 // Mark channel as paused. 2124 SoundDesk.getInstance().setPaused(trackMix.getChannelID(), true); 2125 2126 // Stop playback for this channel 2127 ApolloPlaybackMixer.getInstance().stop(ts); 2128 2129 } 2130 2096 2131 } 2097 2132 }
Note:
See TracChangeset
for help on using the changeset viewer.