-update to hydrogen-0.9.4: bugfixes, qt3->qt4, code cleanup & file renaming

-add sndio audio and midi support, drop OSS audio support
- take maintainership
maintainer change suggested by grange@ (former maintainer), ok ratchov@
This commit is contained in:
jakemsr 2010-01-11 05:11:32 +00:00
parent 1d3505c9eb
commit 4d99813bba
30 changed files with 1250 additions and 650 deletions

View File

@ -1,36 +1,58 @@
# $OpenBSD: Makefile,v 1.7 2009/08/10 06:29:52 kili Exp $
# $OpenBSD: Makefile,v 1.8 2010/01/11 05:11:32 jakemsr Exp $
COMMENT= software drum machine
DISTNAME= hydrogen-0.9.3
PKGNAME= ${DISTNAME}p4
DISTNAME= hydrogen-0.9.4
CATEGORIES= audio
HOMEPAGE= http://www.hydrogen-music.org/
MAINTAINER= Alexander Yurchenko <grange@openbsd.org>
MAINTAINER= Jacob Meuser <jakemsr@openbsd.org>
# GPL
# GPLv2
PERMIT_PACKAGE_CDROM= Yes
PERMIT_PACKAGE_FTP= Yes
PERMIT_DISTFILES_CDROM= Yes
PERMIT_DISTFILES_FTP= Yes
WANTLIB= X11 Xext c m ogg ossaudio pthread stdc++ pthread-stubs \
xcb
WANTLIB= c m ogg pthread sndio stdc++
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=hydrogen/}
LIB_DEPENDS= sndfile.>=1::audio/libsndfile \
LIB_DEPENDS= QtGui,QtNetwork,QtXml::x11/qt4 \
sndfile.>=1::audio/libsndfile \
FLAC.>=8,FLAC++.>=7::audio/flac \
jack::audio/jack
jack::audio/jack \
archive::archivers/libarchive
RUN_DEPENDS= :desktop-file-utils-*:devel/desktop-file-utils
USE_X11= Yes
MODULES= x11/qt3
MODULES= x11/qt4 devel/scons
CONFIGURE_STYLE= gnu
CONFIGURE_ARGS+= --disable-lrdf-support
CONFIGURE_ENV= QTDIR="${MODQT_LIBDIR}" \
CPPFLAGS="-I${LOCALBASE}/include" \
LDFLAGS="-L${LOCALBASE}/lib"
MAKE_ENV+= QTDIR="${MODQT4_QTDIR}"
MODSCONS_FLAGS= localinc="-I${LOCALBASE}/include -I${X11BASE}/include" \
locallib="-L${LOCALBASE}/lib -L${X11BASE}/lib -logg -pthread" \
optflags="${CXXFLAGS} " \
libarchive="1" sndio="1" oss="0" alsa="0" portmidi="0" \
portaudio="0" lash="0" lrdf="0"
NO_REGRESS= Yes
post-extract:
cp ${FILESDIR}/Sndio{Audio,Midi}Driver.h \
${FILESDIR}/sndio_{audio,midi}_driver.cpp \
${WRKSRC}/libs/hydrogen/src/IO
do-install:
${INSTALL_PROGRAM} ${WRKBUILD}/hydrogen ${PREFIX}/bin
${INSTALL_DATA_DIR} ${PREFIX}/share/applications
${INSTALL_DATA} ${WRKBUILD}/hydrogen.desktop \
${PREFIX}/share/applications
${INSTALL_DATA_DIR} ${PREFIX}/share/pixmaps
${INSTALL_DATA} ${WRKSRC}/data/img/gray/h2-icon.svg \
${PREFIX}/share/pixmaps
${INSTALL_DATA_DIR} ${PREFIX}/share/hydrogen
${INSTALL_DATA_DIR} ${PREFIX}/share/hydrogen/data
#mv -f ${WRKSRC}/data/new_tutorial ${WRKDIR}
cd ${WRKSRC}/data && umask 022 && \
pax -rw . ${PREFIX}/share/hydrogen/data
.include <bsd.port.mk>

View File

@ -1,5 +1,5 @@
MD5 (hydrogen-0.9.3.tar.gz) = 1YQLXTMNQz0A6hcn77D8fw==
RMD160 (hydrogen-0.9.3.tar.gz) = Ik58mSCPfproxwprqxp8OyDR61Y=
SHA1 (hydrogen-0.9.3.tar.gz) = TAfT0lCSJCEYLw3VJ5ZWKFiLy0o=
SHA256 (hydrogen-0.9.3.tar.gz) = tXBWizKgvprS75BTjjFW3mqcUNjdXyhj1pVSkNmMhBo=
SIZE (hydrogen-0.9.3.tar.gz) = 2771792
MD5 (hydrogen-0.9.4.tar.gz) = abDjWlu6gVE0fF5uyejk8w==
RMD160 (hydrogen-0.9.4.tar.gz) = nxUURi6qdW/go+j+0/9kejKtAz0=
SHA1 (hydrogen-0.9.4.tar.gz) = 6YhxD4KvhYwMaIyx0eGdeJ/KSe8=
SHA256 (hydrogen-0.9.4.tar.gz) = mCt2i0joQCEElJxk+sTXTYBPQbarG5BFdxGEDamWhdc=
SIZE (hydrogen-0.9.4.tar.gz) = 3808532

View File

@ -0,0 +1,91 @@
/*
* Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef SNDIO_AUDIO_DRIVER_H
#define SNDIO_AUDIO_DRIVER_H
#include <hydrogen/IO/AudioOutput.h>
#include <hydrogen/IO/NullDriver.h>
#ifdef SNDIO_SUPPORT
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <inttypes.h>
#include <iostream>
#include <sndio.h>
#include <hydrogen/globals.h>
namespace H2Core
{
typedef int (*audioProcessCallback)(uint32_t, void *);
/*
* SNDIO Audio Driver
*/
class SndioAudioDriver : public AudioOutput
{
public:
SndioAudioDriver(audioProcessCallback processCallback);
~SndioAudioDriver();
int init(unsigned bufferSize);
int connect();
void disconnect();
void write();
unsigned getBufferSize();
unsigned getSampleRate();
float* getOut_L();
float* getOut_R();
virtual void play();
virtual void stop();
virtual void locate(unsigned long nFrame);
virtual void updateTransportInfo();
virtual void setBpm(float fBPM);
private:
struct sio_hdl *hdl;
struct sio_par par;
short* audioBuffer;
float* out_L;
float* out_R;
audioProcessCallback processCallback;
};
#else
namespace H2Core {
SndioAudioDriver(audioProcessCallback processCallback) : NullDriver(processCallback) {}
};
#endif
};
#endif

View File

@ -0,0 +1,50 @@
/*
* Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef SNDIO_MIDI_DRIVER_H
#define SNDIO_MIDI_DRIVER_H
#ifdef SNDIO_SUPPORT
#include <hydrogen/IO/MidiInput.h>
#include <sndio.h>
namespace H2Core
{
class SndioMidiDriver : public MidiInput
{
public:
struct mio_hdl *hdl;
bool m_bRunning;
SndioMidiDriver();
virtual ~SndioMidiDriver();
virtual void open();
virtual void close();
virtual std::vector<QString> getOutputPortList();
private:
};
};
#endif
#endif

View File

@ -0,0 +1,240 @@
/*
* Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include "SndioAudioDriver.h"
#ifdef SNDIO_SUPPORT
#include <hydrogen/Preferences.h>
#include <pthread.h>
namespace H2Core
{
audioProcessCallback sndioAudioDriver_audioProcessCallback;
bool sndioAudioDriver_running;
pthread_t sndioAudioDriverThread;
int sndio_driver_bufferSize = -1;
SndioAudioDriver *m_pSndioAudioDriverInstance = NULL;
unsigned nNextFrames = 0;
void* sndioAudioDriver_processCaller(void* param)
{
SndioAudioDriver *sndioAudioDriver = (SndioAudioDriver*)param;
sleep(1);
while (sndioAudioDriver_running) {
sndioAudioDriver_audioProcessCallback(sndio_driver_bufferSize, NULL);
sndioAudioDriver->write();
}
pthread_exit(NULL);
return NULL;
}
SndioAudioDriver::SndioAudioDriver(audioProcessCallback processCallback)
: AudioOutput("SndioAudioDriver")
{
INFOLOG("init SndioAudioDriver");
audioBuffer = NULL;
sndioAudioDriver_running = false;
this->processCallback = processCallback;
sndioAudioDriver_audioProcessCallback = processCallback;
m_pSndioAudioDriverInstance = this;
}
SndioAudioDriver::~SndioAudioDriver()
{
INFOLOG("destroy SndioAudioDriver");
}
int SndioAudioDriver::init(unsigned nBufferSize)
{
INFOLOG("SndioAudioDriver::init");
sndio_driver_bufferSize = nBufferSize;
delete[] audioBuffer;
audioBuffer = NULL;
audioBuffer = new short[nBufferSize * 2];
out_L = new float[nBufferSize];
out_R = new float[nBufferSize];
memset(out_L, 0, nBufferSize * sizeof(float));
memset(out_R, 0, nBufferSize * sizeof(float));
return 0;
}
int SndioAudioDriver::connect()
{
INFOLOG("SndioAudioDriver::connect");
Preferences *preferencesMng = Preferences::get_instance();
struct sio_par reqpar;
char audioDevice[32];
snprintf(audioDevice, 32, preferencesMng->m_sSndioDevice.toAscii());
if (strncmp(audioDevice, "", 1) == 0 ||
strncmp(audioDevice, "default", 8) == 0)
hdl = sio_open(NULL, SIO_PLAY, 0);
else
hdl = sio_open(audioDevice, SIO_PLAY, 0);
if (hdl == NULL) {
ERRORLOG("sio_open failed");
return 1;
}
sio_initpar(&par);
par.bits = 16;
par.sig = 1;
par.pchan = 2;
par.rate = preferencesMng->m_nSampleRate;
par.round = sndio_driver_bufferSize;
par.appbufsz = par.round * 2;
reqpar = par;
if (!sio_setpar(hdl, &par)) {
ERRORLOG("sio_setpar failed");
return 1;
}
if (!sio_getpar(hdl, &par)) {
ERRORLOG("sio_getpar failed");
return 1;
}
if (reqpar.bits != par.bits ||
reqpar.sig != par.sig ||
reqpar.pchan != par.pchan) {
ERRORLOG("could not set desired sndio audio parameters");
return 1;
}
INFOLOG(QString("sndio blocksize: %1 frames").arg(par.round));
if (!sio_start(hdl)) {
ERRORLOG("sio_start failed");
return 1;
}
sndioAudioDriver_running = true;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&sndioAudioDriverThread, &attr, sndioAudioDriver_processCaller,
this);
return 0;
}
void SndioAudioDriver::disconnect()
{
INFOLOG("SndioAudioDriver::disconnect");
sndioAudioDriver_running = false;
pthread_join(sndioAudioDriverThread, NULL);
if (hdl != NULL) {
sio_close(hdl);
hdl = NULL;
}
delete [] out_L;
out_L = NULL;
delete [] out_R;
out_R = NULL;
delete[] audioBuffer;
audioBuffer = NULL;
}
void SndioAudioDriver::write()
{
unsigned size = sndio_driver_bufferSize * 2;
for (unsigned i = 0; i < (unsigned)sndio_driver_bufferSize; ++i) {
audioBuffer[i * 2] = (short)(out_L[i] * 32768.0);
audioBuffer[i * 2 + 1] = (short)(out_R[i] * 32768.0);
}
unsigned long written = sio_write(hdl, audioBuffer, size * 2);
if (written != (size * 2) ) {
ERRORLOG("SndioAudioDriver: Error writing samples to audio device.");
}
}
unsigned SndioAudioDriver::getBufferSize()
{
return sndio_driver_bufferSize;
}
unsigned SndioAudioDriver::getSampleRate()
{
Preferences *preferencesMng = Preferences::get_instance();
return preferencesMng->m_nSampleRate;
}
float* SndioAudioDriver::getOut_L()
{
return out_L;
}
float* SndioAudioDriver::getOut_R()
{
return out_R;
}
void SndioAudioDriver::play()
{
m_transport.m_status = TransportInfo::ROLLING;
}
void SndioAudioDriver::stop()
{
m_transport.m_status = TransportInfo::STOPPED;
}
void SndioAudioDriver::locate( unsigned long nFrame )
{
m_transport.m_nFrames = nFrame;
}
void SndioAudioDriver::updateTransportInfo()
{
/* not used */
}
void SndioAudioDriver::setBpm(float fBPM)
{
INFOLOG(QString("[setBpm]: %1").arg(fBPM));
m_transport.m_nBPM = fBPM;
}
}; /* namespace H2Core */
#endif /* SNDIO_SUPPORT */

View File

@ -0,0 +1,262 @@
/*
* Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include "SndioMidiDriver.h"
#include <hydrogen/Preferences.h>
#ifdef SNDIO_SUPPORT
#include <poll.h>
#include <pthread.h>
namespace H2Core
{
pthread_t SndioMidiDriverThread;
void* SndioMidiDriver_thread( void* param )
{
SndioMidiDriver *instance = ( SndioMidiDriver* )param;
MidiMessage msg;
struct pollfd pfd;
nfds_t nfds;
char buf[1], sysex_data[256], status = 0;
int i, msglen, count = 0, sysex_len = 0;
_INFOLOG("SndioMidiDriver_thread starting");
while (instance->m_bRunning) {
nfds = mio_pollfd(instance->hdl, &pfd, POLLIN);
if (poll(&pfd, nfds, 100) < 0) {
_ERRORLOG("poll error; aborting midi thread");
break;
}
if (!(mio_revents(instance->hdl, &pfd) & POLLIN))
continue;
if (!mio_read(instance->hdl, buf, 1)) {
_ERRORLOG("read error; aborting midi thread");
break;
}
if (buf[0] & 0x80) {
status = buf[0];
count = 0;
msglen = 2;
msg.m_type = MidiMessage::UNKNOWN;
msg.m_nData1 = msg.m_nData2 = 0;
switch (status & 0xf0) {
case 0x80:
msg.m_type = MidiMessage::NOTE_OFF;
break;
case 0x90:
msg.m_type = MidiMessage::NOTE_ON;
break;
case 0xa0:
msg.m_type = MidiMessage::POLYPHONIC_KEY_PRESSURE;
break;
case 0xb0:
msg.m_type = MidiMessage::CONTROL_CHANGE;
break;
case 0xc0:
msg.m_type = MidiMessage::PROGRAM_CHANGE;
break;
case 0xd0:
msg.m_type = MidiMessage::CHANNEL_PRESSURE;
break;
case 0xe0:
msg.m_type = MidiMessage::PITCH_WHEEL;
break;
case 0xf0:
switch (status) {
case 0xf0:
msg.m_type = MidiMessage::SYSTEM_EXCLUSIVE;
sysex_len = 0;
break;
case 0xf1:
msg.m_type = MidiMessage::QUARTER_FRAME;
msglen = 1;
break;
case 0xf2:
msg.m_type = MidiMessage::SONG_POS;
break;
case 0xf3:
/* song select */
break;
case 0xf6:
/* tune */
break;
case 0xf7:
if (!sysex_len)
continue;
for (i = 0; i < sysex_len; i++)
msg.m_sysexData.push_back(sysex_data[i]);
instance->handleMidiMessage(msg);
break;
case 0xf8:
/* clock */
break;
case 0xf9:
/* tick */
break;
case 0xfa:
msg.m_type = MidiMessage::START;
msglen = 0;
break;
case 0xfb:
msg.m_type = MidiMessage::CONTINUE;
msglen = 0;
break;
case 0xfc:
msg.m_type = MidiMessage::STOP;
msglen = 0;
break;
case 0xfe:
/* active sense */
break;
case 0xff:
/* reset */
break;
}
break;
}
if (msg.m_type == MidiMessage::UNKNOWN) {
/* _INFOLOG("Unhandled midi message type: " + QString::number(status & 0xff)); */
continue;
}
if (msglen > 0)
continue;
}
/* some bytes left in buffer? */
if (status == 0)
continue;
if (status == 0xf0) {
if (sysex_len > 255) {
_ERRORLOG("already 256 bytes in midi sysex buffer!");
continue;
}
sysex_data[sysex_len++] = buf[0];
continue;
}
if (msglen > 0) {
switch (count) {
case 0:
msg.m_nData1 = buf[0];
break;
case 1:
msg.m_nData2 = buf[0];
break;
default:
continue;
}
if (++count < msglen)
continue;
}
msg.m_nChannel = (status & 0x0f);
instance->handleMidiMessage(msg);
}
_INFOLOG("MIDI Thread DESTROY");
pthread_exit(NULL);
return NULL;
}
SndioMidiDriver::SndioMidiDriver()
: MidiInput("SndioMidiDriver")
, m_bRunning(false)
{
hdl = NULL;
}
SndioMidiDriver::~SndioMidiDriver()
{
if (hdl != NULL)
mio_close(hdl);
hdl = NULL;
}
void SndioMidiDriver::open()
{
char midiDevice[32];
INFOLOG("SndioMidiDriver::open");
snprintf(midiDevice, 32, (Preferences::get_instance()->m_sMidiPortName).toAscii());
if (strncmp(midiDevice, "", 1) == 0 ||
strncmp(midiDevice, "None", 5) == 0 ||
strncmp(midiDevice, "default", 8) == 0)
hdl = mio_open(NULL, MIO_IN, 0);
else
hdl = mio_open(midiDevice, MIO_IN, 0);
if (!hdl) {
ERRORLOG("mio_open failed");
m_bRunning = false;
return;
}
m_bRunning = true;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&SndioMidiDriverThread, &attr, SndioMidiDriver_thread, ( void* )this);
}
void SndioMidiDriver::close()
{
INFOLOG("SndioMidiDriver::close");
if (m_bRunning) {
m_bRunning = false;
pthread_join(SndioMidiDriverThread, NULL);
}
if (hdl != NULL)
mio_close(hdl);
hdl = NULL;
}
std::vector<QString> SndioMidiDriver::getOutputPortList()
{
std::vector<QString> portList;
QString name;
int i;
/* midithru:* */
for (i = 0; i < 4; i++) {
name = "midithru:" + QString::number(i);
portList.push_back(name);
}
/* rmidi:* */
for (i = 0; i < 8; i++) {
name = "rmidi:" + QString::number(i);
QFileInfo di("/dev/rmidi" + QString::number(i));
if (di.exists())
portList.push_back(name);
}
return portList;
}
};
#endif // SNDIO_SUPPORT

View File

@ -1,19 +0,0 @@
$OpenBSD: patch-Makefile_in,v 1.2 2007/05/02 17:51:16 grange Exp $
--- Makefile.in.orig Thu Nov 10 21:00:08 2005
+++ Makefile.in Wed May 2 21:23:27 2007
@@ -219,13 +219,12 @@ hydrogenCUI: hydrogenCUI.mak $(hydrogen_headers) $(hyd
@make -f hydrogenCUI.mak hydrogenCUI
install:
- @install -vD hydrogen $(DESTDIR)$(prefix)/bin/hydrogen
- @install -vD hydrogenPlayer $(DESTDIR)$(prefix)/bin/hydrogenPlayer
+ @install -s hydrogen $(DESTDIR)$(prefix)/bin
+ @install -s hydrogenPlayer $(DESTDIR)$(prefix)/bin
@rm -rf $(DESTDIR)$(prefix)/share/hydrogen
mkdir -p $(DESTDIR)$(prefix)/share/hydrogen/data/
cp -R data $(DESTDIR)$(prefix)/share/hydrogen
mkdir -p $(DESTDIR)$(prefix)/share/hydrogen/data/
- @install -vD hydrogen.desktop $(DESTDIR)$(prefix)/share/applications/hydrogen.desktop
cd plugins;make install;cd ..

View File

@ -0,0 +1,104 @@
$OpenBSD: patch-Sconstruct,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- Sconstruct.orig Mon Sep 7 14:31:13 2009
+++ Sconstruct Sat Jan 2 02:22:51 2010
@@ -47,20 +47,21 @@ def get_platform_flags( opts ):
env = Environment( options = opts )
- if sys.platform == "linux2" or sys.platform == "darwin":
+ if sys.platform == "linux2" or sys.platform == "darwin" or sys.platform == "openbsd4":
if str(env['debug']) == "1":
cppflags += ['-Wall', '-g2', '-ggdb', '-O0']
for flag in env["optflags"].split(" "):
cppflags.append(flag)
else:
- cppflags += ['-O3', '-fomit-frame-pointer', '-funroll-loops']
+ cppflags += ['-fomit-frame-pointer', '-funroll-loops']
#cppflags += " %s" % get_optimized_flags( target_cpu )
for flag in env["optflags"].split(" "):
cppflags.append(flag)
if str(env['oss']) == "1": cppflags.append('-DOSS_SUPPORT')
+ if str(env['sndio']) == "1": cppflags.append('-DSNDIO_SUPPORT')
if str(env['alsa']) == "1": cppflags.append('-DALSA_SUPPORT')
if str(env['jack']) == "1": cppflags.append('-DJACK_SUPPORT')
if str(env['lash']) == "1": cppflags.append('-DLASH_SUPPORT')
@@ -87,6 +88,12 @@ def get_platform_flags( opts ):
if sys.platform == 'linux2':
ldflags.append('-lasound')
+ elif sys.platform == 'openbsd4':
+ for flag in env["localinc"].split(" "):
+ includes.append(flag)
+ for flag in env["locallib"].split(" "):
+ ldflags.append(flag)
+
elif sys.platform == "win32":
includes.append( '3rdparty\libsndfile-1_0_17' )
includes.append( 'build\pthreads\include' )
@@ -158,8 +165,9 @@ def download_3rdparty_libs():
def get_svn_revision():
if sys.platform != "win32":
- p = subprocess.Popen("svnversion -n", shell=True, stdout=subprocess.PIPE)
- return p.stdout.read()
+ return "openbsd ports build"
+ #p = subprocess.Popen("svnversion -n", shell=True, stdout=subprocess.PIPE)
+ #return p.stdout.read()
else:
return "win32 build"
@@ -260,6 +268,7 @@ def get_hydrogen_gui( lib_hydrogen , opts ):
if str(env['flac']) == "1": env.Append( LIBS = ["FLAC","FLAC++"] )
if str(env['jack']) == "1": env.Append( LIBS = ["jack"])
if str(env['alsa']) == "1": env.Append( LIBS = ["asound"])
+ if str(env['sndio']) == "1": env.Append( LIBS = ["sndio"])
if str(env['libarchive']) == "1": env.Append( LIBS = ["archive"])
else: env.Append( LIBS = ["tar"])
if str(env['portaudio']) == "1": env.Append( LIBS = [ "portaudio" ] )
@@ -326,6 +335,8 @@ opts.Add('libarchive', 'Set to 1 to enable libarchive
opts.Add('prefix','Default: /usr/local',"/usr/local")
opts.Add('DESTDIR','Default: none',"")
opts.Add('optflags','Default: none',"")
+opts.Add('localinc','Default: none',"")
+opts.Add('locallib','Default: none',"")
#platform dependent settings
if sys.platform == "darwin":
@@ -334,6 +345,8 @@ if sys.platform == "darwin":
if sys.platform != "win32":
opts.Add('oss', 'Set to 1 to enable oss',1)
+ opts.Add('sndio', 'Set to 1 to enable sndio',1)
+
opts.Add('portmidi', 'Set to 1 to enable portmidi',0)
opts.Add('portaudio', 'Set to 1 to enable portaudio',0)
@@ -348,7 +361,7 @@ if sys.platform != "win32":
opts.Add('flac', 'Set to 1 to enable flac',1)
else:
- #alsa, lash,oss and jack are not available on windows
+ #alsa, lash,oss, jack and sndio are not available on windows
opts.Add('portmidi', 'Set to 1 to enable portmidi',1)
opts.Add('portaudio', 'Set to 1 to enable portaudio',1)
@@ -459,7 +472,7 @@ print ""
print "================================================================="
print " Hydrogen build script"
print ""
-print " Revision: %s" % get_svn_revision()
+# print " Revision: %s" % get_svn_revision()
print " Platform: %s" % platform
if str(env['debug']) == "1" :
@@ -475,6 +488,7 @@ print "Feature Overview:\n"
print " lash: " + printStatus( env["lash"] )
print " oss: " + printStatus( env["oss"] )
+print " sndio: " + printStatus( env["sndio"] )
print " alsa: " + printStatus( env["alsa"] )
print " jack: " + printStatus( env["jack"] )
print "libarchive: " + printStatus( env["libarchive"] )

View File

@ -1,29 +0,0 @@
$OpenBSD: patch-configure,v 1.3 2008/03/24 03:09:42 jakemsr Exp $
--- configure.orig Wed Jan 18 14:03:01 2006
+++ configure Fri Feb 29 15:30:23 2008
@@ -4583,7 +4583,7 @@ cat >>confdefs.h <<\_ACEOF
#define FLAC_SUPPORT 1
_ACEOF
- ac_libraries="${ac_libraries} -lFLAC++ -lFLAC"
+ ac_libraries="${ac_libraries} -lFLAC++ -lFLAC -logg"
features_list="${features_list} (FLAC)"
fi
else
@@ -4620,7 +4620,7 @@ if test "${ac_cv_lib_jack_main+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_check_lib_save_LIBS=$LIBS
-LIBS="-ljack $LIBS"
+LIBS="-ljack -pthread $LIBS"
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4971,6 +4971,7 @@ cat >>confdefs.h <<\_ACEOF
_ACEOF
features_list="${features_list} (OSS)"
+ ac_libraries="${ac_libraries} -lossaudio"
else
echo "OSS support disabled."
fi

View File

@ -1,19 +1,32 @@
$OpenBSD: patch-data_hydrogen_default_conf,v 1.1 2008/03/24 03:09:42 jakemsr Exp $
--- data/hydrogen.default.conf.orig Fri Feb 29 19:07:57 2008
+++ data/hydrogen.default.conf Fri Feb 29 19:08:41 2008
@@ -17,12 +17,12 @@
<samplerate>44100</samplerate>
$OpenBSD: patch-data_hydrogen_default_conf,v 1.2 2010/01/11 05:11:32 jakemsr Exp $
--- data/hydrogen.default.conf.orig Wed Aug 26 05:12:27 2009
+++ data/hydrogen.default.conf Sat Jan 2 03:20:03 2010
@@ -27,7 +27,7 @@
<lastNews>-</lastNews>
<oss_driver>
- <ossDevice>/dev/dsp</ossDevice>
+ <ossDevice>/dev/audio</ossDevice>
<audio_engine>
- <audio_driver>Auto</audio_driver>
+ <audio_driver>SndioAudio</audio_driver>
<use_metronome>false</use_metronome>
<metronome_volume>0.5</metronome_volume>
<maxNotes>256</maxNotes>
@@ -38,6 +38,10 @@
<ossDevice>/dev/dsp</ossDevice>
</oss_driver>
+ <sndio_driver>
+ <sndioDevice></sndioDevice>
+ </sndio_driver>
+
<jack_driver>
- <jack_port_name_1>alsa_pcm:playback_1</jack_port_name_1>
- <jack_port_name_2>alsa_pcm:playback_2</jack_port_name_2>
+ <jack_port_name_1>system:playback_1</jack_port_name_1>
+ <jack_port_name_2>system:playback_2</jack_port_name_2>
<jack_transport_mode>USE_JACK_TRANSPORT</jack_transport_mode>
<jack_connect_defaults>true</jack_connect_defaults>
<jack_track_outs>false</jack_track_outs>
<jack_port_name_1>alsa_pcm:playback_1</jack_port_name_1>
<jack_port_name_2>alsa_pcm:playback_2</jack_port_name_2>
@@ -52,7 +56,7 @@
</alsa_audio_driver>
<midi_driver>
- <driverName>ALSA</driverName>
+ <driverName>SndioMidi</driverName>
<port_name>None</port_name>
<channel_filter>-1</channel_filter>
<ignore_note_off>false</ignore_note_off>

View File

@ -0,0 +1,19 @@
$OpenBSD: patch-features_pri,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- features.pri.orig Fri Jan 1 03:05:13 2010
+++ features.pri Fri Jan 1 03:05:45 2010
@@ -33,6 +33,7 @@ linux-g++ {
H2DEFINES += LADSPA_SUPPORT
H2DEFINES += LRDF_SUPPORT
H2DEFINES += OSS_SUPPORT
+ H2DEFINES += SNDIO_SUPPORT
}
linux-g++-64 {
@@ -43,6 +44,7 @@ linux-g++-64 {
H2DEFINES += LADSPA_SUPPORT
H2DEFINES += LRDF_SUPPORT
H2DEFINES += OSS_SUPPORT
+ H2DEFINES += SNDIO_SUPPORT
}
win32 {

View File

@ -0,0 +1,100 @@
$OpenBSD: patch-gui_src_PreferencesDialog_cpp,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- gui/src/PreferencesDialog.cpp.orig Wed Jul 22 20:10:25 2009
+++ gui/src/PreferencesDialog.cpp Sat Jan 2 03:24:33 2010
@@ -63,6 +63,7 @@ PreferencesDialog::PreferencesDialog(QWidget* parent)
driverComboBox->addItem( "ALSA" );
driverComboBox->addItem( "OSS" );
driverComboBox->addItem( "PortAudio" );
+ driverComboBox->addItem( "SndioAudio" );
#ifdef Q_OS_MACX
driverComboBox->addItem( "CoreAudio" );
#endif
@@ -84,9 +85,12 @@ PreferencesDialog::PreferencesDialog(QWidget* parent)
else if ( sAudioDriver == "PortAudio" ) {
driverComboBox->setCurrentIndex(4);
}
- else if ( sAudioDriver == "CoreAudio" ) {
+ else if ( sAudioDriver == "SndioAudio" ) {
driverComboBox->setCurrentIndex(5);
}
+ else if ( sAudioDriver == "CoreAudio" ) {
+ driverComboBox->setCurrentIndex(6);
+ }
else {
ERRORLOG( "Unknown audio driver from preferences [" + sAudioDriver + "]" );
}
@@ -95,6 +99,7 @@ PreferencesDialog::PreferencesDialog(QWidget* parent)
m_pMidiDriverComboBox->clear();
m_pMidiDriverComboBox->addItem( "ALSA" );
m_pMidiDriverComboBox->addItem( "PortMidi" );
+ m_pMidiDriverComboBox->addItem( "SndioMidi" );
m_pMidiDriverComboBox->addItem( "CoreMidi" );
if ( pPref->m_sMidiDriver == "ALSA" ) {
@@ -103,9 +108,12 @@ PreferencesDialog::PreferencesDialog(QWidget* parent)
else if ( pPref->m_sMidiDriver == "PortMidi" ) {
m_pMidiDriverComboBox->setCurrentIndex(1);
}
- else if ( pPref->m_sMidiDriver == "CoreMidi" ) {
+ else if ( pPref->m_sMidiDriver == "SndioMidi" ) {
m_pMidiDriverComboBox->setCurrentIndex(2);
}
+ else if ( pPref->m_sMidiDriver == "CoreMidi" ) {
+ m_pMidiDriverComboBox->setCurrentIndex(3);
+ }
else {
ERRORLOG( "Unknown midi input from preferences [" + pPref->m_sMidiDriver + "]" );
}
@@ -297,6 +305,10 @@ void PreferencesDialog::on_okBtn_clicked()
else if (driverComboBox->currentText() == "PortAudio" ) {
pPref->m_sAudioDriver = "PortAudio";
}
+ else if (driverComboBox->currentText() == "SndioAudio" ) {
+ pPref->m_sAudioDriver = "SndioAudio";
+ pPref->m_sSndioDevice = m_pAudioDeviceTxt->text();
+ }
else if (driverComboBox->currentText() == "CoreAudio" ) {
pPref->m_sAudioDriver = "CoreAudio";
}
@@ -346,6 +358,9 @@ void PreferencesDialog::on_okBtn_clicked()
else if ( m_pMidiDriverComboBox->currentText() == "PortMidi" ) {
pPref->m_sMidiDriver = "PortMidi";
}
+ else if ( m_pMidiDriverComboBox->currentText() == "SndioMidi" ) {
+ pPref->m_sMidiDriver = "SndioMidi";
+ }
else if ( m_pMidiDriverComboBox->currentText() == "CoreMidi" ) {
pPref->m_sMidiDriver = "CoreMidi";
}
@@ -439,6 +454,11 @@ void PreferencesDialog::updateDriverInfo()
bPortAudio_support = true;
#endif
+ bool bSndio_support = false;
+ #ifdef SNDIO_SUPPORT
+ bSndio_support = true;
+ #endif
+
bool bCoreAudio_support = false;
#ifdef COREAUDIO_SUPPORT
bCoreAudio_support = true;
@@ -488,6 +508,19 @@ void PreferencesDialog::updateDriverInfo()
}
m_pAudioDeviceTxt->setEnabled(true);
m_pAudioDeviceTxt->setText( pPref->m_sAlsaAudioDevice );
+ bufferSizeSpinBox->setEnabled(true);
+ sampleRateComboBox->setEnabled(true);
+ trackOutputComboBox->setEnabled( false );
+ trackOutsCheckBox->setEnabled( false );
+ connectDefaultsCheckBox->setEnabled(false);
+ }
+ else if ( driverComboBox->currentText() == "SndioAudio" ) {
+ info += trUtf8("<b>sndio</b><br>audio driver");
+ if ( !bSndio_support ) {
+ info += trUtf8("<br><b><font color=\"red\">Not compiled</font></b>");
+ }
+ m_pAudioDeviceTxt->setEnabled(true);
+ m_pAudioDeviceTxt->setText( pPref->m_sSndioDevice );
bufferSizeSpinBox->setEnabled(true);
sampleRateComboBox->setEnabled(true);
trackOutputComboBox->setEnabled( false );

View File

@ -0,0 +1,12 @@
$OpenBSD: patch-gui_src_SongEditor_SongEditor_cpp,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- gui/src/SongEditor/SongEditor.cpp.orig Fri Dec 11 23:01:59 2009
+++ gui/src/SongEditor/SongEditor.cpp Fri Dec 11 23:02:38 2009
@@ -20,6 +20,8 @@
*
*/
+#include <unistd.h>
+
#include <assert.h>
#include <algorithm>
#include <memory>

View File

@ -0,0 +1,22 @@
$OpenBSD: patch-gui_src_main_cpp,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- gui/src/main.cpp.orig Fri Jan 1 21:17:50 2010
+++ gui/src/main.cpp Fri Jan 1 21:22:45 2010
@@ -219,6 +219,9 @@ int main(int argc, char *argv[])
if (sSelectedDriver == "auto") {
pPref->m_sAudioDriver = "Auto";
}
+ else if (sSelectedDriver == "sndio") {
+ pPref->m_sAudioDriver = "SndioAudio";
+ }
else if (sSelectedDriver == "jack") {
pPref->m_sAudioDriver = "Jack";
}
@@ -380,7 +383,7 @@ void showInfo()
void showUsage()
{
std::cout << "Usage: hydrogen [-v] [-h] -s file" << std::endl;
- std::cout << " -d, --driver AUDIODRIVER - Use the selected audio driver (jack, alsa, oss)" << std::endl;
+ std::cout << " -d, --driver AUDIODRIVER - Use the selected audio driver (jack, alsa, oss, sndio)" << std::endl;
std::cout << " -s, --song FILE - Load a song (*.h2song) at startup" << std::endl;
#ifdef LASH_SUPPORT
std::cout << " --lash-no-start-server - If LASH server not running, don't start" << endl

View File

@ -0,0 +1,13 @@
$OpenBSD: patch-libs_hydrogen_include_hydrogen_Preferences_h,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- libs/hydrogen/include/hydrogen/Preferences.h.orig Fri Jan 1 02:59:34 2010
+++ libs/hydrogen/include/hydrogen/Preferences.h Fri Jan 1 02:59:59 2010
@@ -188,6 +188,9 @@ class Preferences : public Object (public)
//___ oss driver properties ___
QString m_sOSSDevice; ///< Device used for output
+ //___ sndio driver properties ___
+ QString m_sSndioDevice; ///< Device used for output
+
//___ MIDI Driver properties
QString m_sMidiDriver;
QString m_sMidiPortName;

View File

@ -0,0 +1,54 @@
$OpenBSD: patch-libs_hydrogen_src_hydrogen_cpp,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- libs/hydrogen/src/hydrogen.cpp.orig Wed Jul 22 20:36:28 2009
+++ libs/hydrogen/src/hydrogen.cpp Fri Jan 1 16:35:38 2010
@@ -67,6 +67,8 @@
#include <hydrogen/playlist.h>
#include "IO/OssDriver.h"
+#include "IO/SndioAudioDriver.h"
+#include "IO/SndioMidiDriver.h"
#include "IO/FakeDriver.h"
#include "IO/AlsaAudioDriver.h"
#include "IO/PortAudioDriver.h"
@@ -1492,6 +1494,12 @@ AudioOutput* createDriver( const QString& sDriver )
delete pDriver;
pDriver = NULL;
}
+ } else if ( sDriver == "SndioAudio" ) {
+ pDriver = new SndioAudioDriver( audioEngine_process );
+ if ( pDriver->get_class_name() == "NullDriver" ) {
+ delete pDriver;
+ pDriver = NULL;
+ }
} else if ( sDriver == "Jack" ) {
pDriver = new JackOutput( audioEngine_process );
if ( pDriver->get_class_name() == "NullDriver" ) {
@@ -1579,6 +1587,7 @@ void audioEngine_startAudioDrivers()
QString sAudioDriver = preferencesMng->m_sAudioDriver;
// sAudioDriver = "Auto";
if ( sAudioDriver == "Auto" ) {
+ if ( ( m_pAudioDriver = createDriver( "SndioAudio" ) ) == NULL ) {
if ( ( m_pAudioDriver = createDriver( "Jack" ) ) == NULL ) {
if ( ( m_pAudioDriver = createDriver( "Alsa" ) ) == NULL ) {
if ( ( m_pAudioDriver = createDriver( "CoreAudio" ) ) == NULL ) {
@@ -1596,6 +1605,7 @@ void audioEngine_startAudioDrivers()
}
}
}
+ }
} else {
m_pAudioDriver = createDriver( sAudioDriver );
if ( m_pAudioDriver == NULL ) {
@@ -1613,6 +1623,12 @@ void audioEngine_startAudioDrivers()
#ifdef ALSA_SUPPORT
// Create MIDI driver
m_pMidiDriver = new AlsaMidiDriver();
+ m_pMidiDriver->open();
+ m_pMidiDriver->setActive( true );
+#endif
+ } else if ( preferencesMng->m_sMidiDriver == "SndioMidi" ) {
+#ifdef SNDIO_SUPPORT
+ m_pMidiDriver = new SndioMidiDriver();
m_pMidiDriver->open();
m_pMidiDriver->setActive( true );
#endif

View File

@ -0,0 +1,64 @@
$OpenBSD: patch-libs_hydrogen_src_preferences_cpp,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- libs/hydrogen/src/preferences.cpp.orig Wed Aug 26 05:12:27 2009
+++ libs/hydrogen/src/preferences.cpp Sat Jan 2 03:22:38 2010
@@ -143,7 +143,7 @@ Preferences::Preferences()
m_patternCategories.push_back( QString("not_categorized") );
//___ audio engine properties ___
- m_sAudioDriver = QString("Auto");
+ m_sAudioDriver = QString("SndioAudio");
m_bUseMetronome = false;
m_fMetronomeVolume = 0.5;
m_nMaxNotes = 256;
@@ -153,8 +153,11 @@ Preferences::Preferences()
//___ oss driver properties ___
m_sOSSDevice = QString("/dev/dsp");
+ //___ SndioAudio driver properties ___
+ m_sSndioDevice = QString("");
+
//___ MIDI Driver properties
- m_sMidiDriver = QString("ALSA");
+ m_sMidiDriver = QString("SndioMidi");
m_sMidiPortName = QString("None");
m_nMidiChannelFilter = -1;
m_bMidiNoteOffIgnore = false;
@@ -423,6 +426,15 @@ void Preferences::loadPreferences( bool bGlobal )
m_sOSSDevice = LocalFileMng::readXmlString( ossDriverNode, "ossDevice", m_sOSSDevice );
}
+ //// SNDIO AUDIO DRIVER ////
+ TiXmlNode* sndioAudioDriverNode;
+ if ( !( sndioAudioDriverNode = audioEngineNode->FirstChild( "sndio_driver" ) ) ) {
+ WARNINGLOG( "sndio_driver node not found" );
+ recreate = true;
+ } else {
+ m_sSndioDevice = LocalFileMng::readXmlString( sndioAudioDriverNode, "sndioDevice", m_sSndioDevice );
+ }
+
//// JACK DRIVER ////
TiXmlNode* jackDriverNode;
if ( !( jackDriverNode = audioEngineNode->FirstChild( "jack_driver" ) ) ) {
@@ -469,7 +481,7 @@ void Preferences::loadPreferences( bool bGlobal )
WARNINGLOG( "midi_driver node not found" );
recreate = true;
} else {
- m_sMidiDriver = LocalFileMng::readXmlString( midiDriverNode, "driverName", "ALSA" );
+ m_sMidiDriver = LocalFileMng::readXmlString( midiDriverNode, "driverName", "SndioMidi" );
m_sMidiPortName = LocalFileMng::readXmlString( midiDriverNode, "port_name", "None" );
m_nMidiChannelFilter = LocalFileMng::readXmlInt( midiDriverNode, "channel_filter", -1 );
m_bMidiNoteOffIgnore = LocalFileMng::readXmlBool( midiDriverNode, "ignore_note_off", true );
@@ -750,6 +762,13 @@ void Preferences::savePreferences()
LocalFileMng::writeXmlString( &ossDriverNode, "ossDevice", m_sOSSDevice );
}
audioEngineNode.InsertEndChild( ossDriverNode );
+
+ //// SNDIO DRIVER ////
+ TiXmlElement sndioAudioDriverNode( "sndio_driver" );
+ {
+ LocalFileMng::writeXmlString( &sndioAudioDriverNode, "sndioDevice", m_sSndioDevice );
+ }
+ audioEngineNode.InsertEndChild( sndioAudioDriverNode );
//// JACK DRIVER ////
TiXmlElement jackDriverNode( "jack_driver" );

View File

@ -1,12 +0,0 @@
$OpenBSD: patch-plugins_wasp_Makefile_in,v 1.1.1.1 2006/09/25 18:56:00 grange Exp $
--- plugins/wasp/Makefile.in.orig Mon Sep 25 00:36:29 2006
+++ plugins/wasp/Makefile.in Mon Sep 25 00:36:49 2006
@@ -24,7 +24,7 @@ clean:
install:
@echo "Installing WASP plugins"
mkdir -p $(DESTDIR)$(prefix)/lib/hydrogen/plugins/
- @install -vD *.so $(DESTDIR)$(prefix)/lib/hydrogen/plugins
+ @install *.so $(DESTDIR)$(prefix)/lib/hydrogen/plugins
uninstall:
@rm -rf $(DESTDIR)$(prefix)/lib/hydrogen

View File

@ -0,0 +1,12 @@
$OpenBSD: patch-qt4_py,v 1.1 2010/01/11 05:11:32 jakemsr Exp $
--- qt4.py.orig Fri Jan 1 02:03:00 2010
+++ qt4.py Fri Jan 1 02:04:29 2010
@@ -444,7 +444,7 @@ def enable_modules(self, modules, debug=False, crossco
try : self.AppendUnique(CPPDEFINES=moduleDefines[module])
except: pass
debugSuffix = ''
- if sys.platform == "linux2" and not crosscompiling :
+ if sys.platform == "linux2" or sys.platform == "openbsd4" and not crosscompiling :
if debug : debugSuffix = '_debug'
for module in modules :
if module not in pclessModules : continue

View File

@ -1,22 +0,0 @@
$OpenBSD: patch-src_lib_FLACFile_cpp,v 1.1 2007/09/18 18:30:35 mgrimm Exp $
--- src/lib/FLACFile.cpp.orig Tue Nov 8 10:31:22 2005
+++ src/lib/FLACFile.cpp Sun Sep 16 12:13:04 2007
@@ -164,15 +164,13 @@ void FLACFile_real::load( string sFilename )
}
set_metadata_ignore_all();
- set_filename( sFilename.c_str() );
- State s=init();
- if( s != FLAC__FILE_DECODER_OK ) {
+ if( FLAC__STREAM_DECODER_INIT_STATUS_OK != init( sFilename.c_str() ) ) {
errorLog( "[load] Error in init()" );
}
- if ( process_until_end_of_file() == false ) {
- errorLog( "[load] Error in process_until_end_of_file()" );
+ if ( process_until_end_of_stream() == false ) {
+ errorLog( "[load] Error in process_until_end_of_stream()" );
}
}

View File

@ -1,111 +0,0 @@
$OpenBSD: patch-src_lib_Hydrogen_cpp,v 1.1 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/Hydrogen.cpp.orig Fri Feb 29 18:26:51 2008
+++ src/lib/Hydrogen.cpp Sat Mar 1 00:19:56 2008
@@ -511,6 +511,11 @@ inline void audioEngine_process_checkBPMChanged()
// update tickSize
m_pAudioDriver->m_transport.m_nFrames = fNewFrames;
+#ifdef JACK_SUPORT
+ if ( "JackDriver" == m_pAudioDriver->getClassName() && m_audioEngineState == STATE_PLAYING ) {
+ static_cast< JackDriver* >( m_pAudioDriver )->calculateFrameOffset();
+ }
+#endif
fTickNumber = (float)m_pAudioDriver->m_transport.m_nFrames / (float)m_pAudioDriver->m_transport.m_nTickSize;
// hydrogenInstance->infoLog("[audioEngine_process_checkBPMChanged] New tick number: " + toString( fTickNumber ) );
@@ -1789,10 +1794,6 @@ GenericDriver* createDriver(const std::string& sDriver
}
else {
#ifdef JACK_SUPPORT
- // set use track outputs flag
- m_bUseTrackOuts = pPref->m_bJackTrackOuts;
- ((JackDriver *) pDriver)->setTrackOuts( m_bUseTrackOuts );
-
m_bUseDefaultOuts = pPref->m_bJackConnectDefaults;
((JackDriver *) pDriver)->setConnectDefaults( m_bUseDefaultOuts );
#endif
@@ -1923,7 +1924,7 @@ void audioEngine_startAudioDrivers() {
m_pAudioDriver->setBpm( m_pSong->m_fBPM );
}
- audioEngine_unlock(); // test...
+ // audioEngine_unlock(); // test...
if ( m_pAudioDriver ) {
int res = m_pAudioDriver->connect();
@@ -1946,15 +1947,6 @@ void audioEngine_startAudioDrivers() {
hydrogenInstance->errorLog( "[audioEngine_startAudioDrivers] m_pMainBuffer_R == NULL" );
}
-#ifdef JACK_SUPPORT
- if (m_bUseTrackOuts) {
- for (unsigned i = 0; i < MAX_INSTRUMENTS; ++i) {
- m_pTrackBuffers_L[i] = ((JackDriver*)m_pAudioDriver)->getTrackOut_L(i);
- m_pTrackBuffers_R[i] = ((JackDriver*)m_pAudioDriver)->getTrackOut_R(i);
- }
- }
-#endif
-
audioEngine_setupLadspaFX( m_pAudioDriver->getBufferSize() );
}
@@ -1966,6 +1958,8 @@ void audioEngine_startAudioDrivers() {
else if ( m_audioEngineState == STATE_READY ) {
EventQueue::getInstance()->pushEvent( EVENT_STATE, STATE_READY );
}
+
+ audioEngine_unlock(); // Unlocking earlier might execute he jack process() callback before we are fully initialized.
}
@@ -2568,21 +2562,20 @@ unsigned long Hydrogen::getTotalFrames()
}
-
-/// Set the position in the song
-void Hydrogen::setPatternPos( int pos )
+long Hydrogen::getTickForPosition( int pos )
{
- audioEngine_lock( "Hydrogen::setPatternPos" );
-
int nPatternGroups = (m_pSong->getPatternGroupVector())->size();
if ( pos >= nPatternGroups ) {
- hydrogenInstance->warningLog( "[Hydrogen::setPatternPos()] patternPos > nPatternGroups. pos: " + toString(pos) + ", nPatternGroups: " + toString(nPatternGroups) );
- audioEngine_unlock();
- return;
+ if (m_pSong->isLoopEnabled() ) {
+ pos = pos % nPatternGroups;
+ } else {
+ hydrogenInstance->warningLog( "[Hydrogen::setPatternPos()] patternPos > nPatternGroups. pos: " + toString(pos) + ", nPatternGroups: " + toString(nPatternGroups) );
+ return -1;
+ }
}
vector<PatternList*> *pColumns = m_pSong->getPatternGroupVector();
- int totalTick = 0;
+ long totalTick = 0;
int nPatternSize;
Pattern *pPattern = NULL;
for ( int i = 0; i < pos; ++i ) {
@@ -2596,6 +2589,20 @@ void Hydrogen::setPatternPos( int pos )
}
totalTick += nPatternSize;
+ }
+ return totalTick;
+}
+
+
+/// Set the position in the song
+void Hydrogen::setPatternPos( int pos )
+{
+ audioEngine_lock( "Hydrogen::setPatternPos" );
+
+ long totalTick = getTickForPosition (pos );
+ if ( totalTick < 0 ) {
+ audioEngine_unlock();
+ return;
}
if (getState() != STATE_PLAYING) {

View File

@ -1,11 +0,0 @@
$OpenBSD: patch-src_lib_Hydrogen_h,v 1.1 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/Hydrogen.h.orig Sat Mar 1 01:24:50 2008
+++ src/lib/Hydrogen.h Sat Mar 1 01:25:46 2008
@@ -119,6 +119,7 @@ class Hydrogen : public Object
void raiseError(unsigned nErrorCode);
unsigned long getTotalFrames();
+ long getTickForPosition( int pos );
void previewSample( Sample *pSample );

View File

@ -1,11 +0,0 @@
$OpenBSD: patch-src_lib_Preferences_cpp,v 1.1 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/Preferences.cpp.orig Sat Mar 1 00:41:22 2008
+++ src/lib/Preferences.cpp Sat Mar 1 00:44:00 2008
@@ -82,6 +82,7 @@ Preferences::Preferences()
m_ladspaPathVect.push_back( "/usr/lib/ladspa" );
m_ladspaPathVect.push_back( string( CONFIG_PREFIX ).append( "/lib/hydrogen/plugins" ) );
m_ladspaPathVect.push_back( "/usr/local/lib/ladspa" );
+ m_ladspaPathVect.push_back( string( CONFIG_PREFIX ).append( "/lib/ladspa" ) );
}
m_pDefaultUIStyle = new UIStyle();

View File

@ -1,229 +0,0 @@
$OpenBSD: patch-src_lib_drivers_JackDriver_cpp,v 1.1 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/drivers/JackDriver.cpp.orig Fri Feb 29 17:46:02 2008
+++ src/lib/drivers/JackDriver.cpp Sat Mar 1 00:21:04 2008
@@ -59,8 +59,10 @@ JackDriver::JackDriver(JackProcessCallback processCall
{
infoLog( "INIT" );
jackDriverInstance = this;
- track_out_flag = true;
this->processCallback = processCallback;
+
+ must_relocate = 0;
+ bbt_frame_offset = 0;
}
@@ -94,14 +96,25 @@ int JackDriver::connect()
if ( connect_out_flag ) {
// connect the ports
- if ( jack_connect ( client, jack_port_name( output_port_1 ), output_port_name_1.c_str() ) ) {
- ( Hydrogen::getInstance() )->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT );
+ if ( jack_connect ( client, jack_port_name( output_port_1 ), output_port_name_1.c_str() ) == 0 &&
+ jack_connect ( client, jack_port_name( output_port_2 ), output_port_name_2.c_str() ) == 0 ) {
+ return 0;
+ }
+
+ infoLog("Could not connect to saved out-ports. Connecting to first pair of in-ports");
+ const char ** portnames = jack_get_ports ( client, NULL, NULL, JackPortIsInput );
+ if ( !portnames || !portnames[0] || !portnames[1] ) {
+ errorLog( "Couldn't locate two Jack input ports" );
+ Hydrogen::getInstance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT );
return 2;
}
- if ( jack_connect ( client, jack_port_name( output_port_2 ), output_port_name_2.c_str() ) ) {
- ( Hydrogen::getInstance() )->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT );
+ if ( jack_connect ( client, jack_port_name( output_port_1 ), portnames[0] ) != 0 ||
+ jack_connect ( client, jack_port_name( output_port_2 ), portnames[1] ) != 0 ) {
+ errorLog( "Couldn't connect to first pair of Jack input ports" );
+ Hydrogen::getInstance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT );
return 2;
}
+ free( portnames );
}
return 0;
@@ -159,9 +172,61 @@ unsigned JackDriver::getSampleRate()
return jack_server_sampleRate;
}
+void JackDriver::calculateFrameOffset()
+{
+ bbt_frame_offset = m_JackTransportPos.frame - m_transport.m_nFrames;
+}
+/// Take beat-bar-tick info from the Jack system, and translate it to a new internal frame position and ticksize.
+void JackDriver::relocateBBT()
+{
+ if ( m_transport.m_status != TransportInfo::ROLLING || !( m_JackTransportPos.valid & JackPositionBBT ) /**the last check is *probably* redundant*/ ) return;
+
+ Hydrogen * H = Hydrogen::getInstance();
+ Song * S = H->getSong();
+
+ float hydrogen_TPB = ( float )S->m_nResolution;
+
+ long bar_ticks = 0;
+ if ( S->getMode() == Song::SONG_MODE ) {
+ bar_ticks = H->getTickForPosition( m_JackTransportPos.bar ); // (Reasonable?) assumption that one pattern is _always_ 1 bar long!
+ if ( bar_ticks < 0 ) bar_ticks = 0; // ignore error NOTE This is wrong -- if loop state is off, transport should just stop ??
+ }
+ float hydrogen_ticks_to_locate = bar_ticks + ( m_JackTransportPos.beat-1 )*hydrogen_TPB + m_JackTransportPos.tick*( hydrogen_TPB/m_JackTransportPos.ticks_per_beat );
+
+ // char bbt[15];
+ // sprintf( bbt, "[%d,%d,%d]", m_JackTransportPos.bar, m_JackTransportPos.beat, m_JackTransportPos.tick );
+ string bbt;
+ bbt = "[" + toString(m_JackTransportPos.bar) +
+ "," + toString(m_JackTransportPos.beat) +
+ "," + toString(m_JackTransportPos.tick) + "]";
+ warningLog( "Locating BBT: " + bbt + /*" -- Tx/Beat = "+toString(m_JackTransportPos.ticks_per_beat)+", Meter "+toString(m_JackTransportPos.beats_per_bar)+"/"+toString(m_JackTransportPos.beat_type)+*/" =>tick " + toString( hydrogen_ticks_to_locate ) );
+
+ float fNewTickSize = getSampleRate() * 60.0 / m_transport.m_nBPM / S->m_nResolution;;
+ // not S->m_fBPM !??
+
+ if ( fNewTickSize == 0 ) return; // ??!?
+
+ // NOTE this _should_ prevent audioEngine_process_checkBPMChanged in Hydrogen.cpp from recalculating things.
+ m_transport.m_nTickSize = fNewTickSize;
+
+ long long nNewFrames = ( long long )( hydrogen_ticks_to_locate * fNewTickSize );
+ if ( m_JackTransportPos.valid & JackBBTFrameOffset )
+ nNewFrames += m_JackTransportPos.bbt_offset;
+ m_transport.m_nFrames = nNewFrames;
+
+ /// offset between jack- and internal position
+ calculateFrameOffset();
+
+}
+
+///
+/// When jack_transport_start() is called, it takes effect from the next processing cycle.
+/// The location info from the timebase_master, if there is one, will not be available until the _next_ next cycle.
+/// The code must therefore wait one cycle before syncing up with timebase_master.
+///
void JackDriver::updateTransportInfo()
{
if (Preferences::getInstance()->m_bJackTransportMode == Preferences::USE_JACK_TRANSPORT) {
@@ -175,6 +240,10 @@ void JackDriver::updateTransportInfo()
break;
case JackTransportRolling:
+ if ( m_transport.m_status != TransportInfo::ROLLING && ( m_JackTransportPos.valid & JackPositionBBT ) ) {
+ must_relocate = 2;
+ warningLog( "Jack transport starting: Resyncing in 2 x Buffersize!!" );
+ }
m_transport.m_status = TransportInfo::ROLLING;
//infoLog( "[updateTransportInfo] ROLLING - frames: " + toString(m_transportPos.frame) );
break;
@@ -189,22 +258,37 @@ void JackDriver::updateTransportInfo()
}
-/*
// FIXME
// TickSize and BPM
if ( m_JackTransportPos.valid & JackPositionBBT ) {
- if ( m_transport.m_nBPM != m_JackTransportPos.beats_per_minute ) {
- m_transport.m_nBPM = m_JackTransportPos.beats_per_minute;
- (Hydrogen::getInstance())->getSong()->m_fBPM = m_JackTransportPos.beats_per_minute;
- warningLog( "[updateTransportInfo] new BPM from jack-transport: " + toString(m_JackTransportPos.beats_per_minute) );
+ float bpm = ( float )m_JackTransportPos.beats_per_minute;
+ if ( m_transport.m_nBPM != bpm ) {
+
+ warningLog( "Tempo change from jack-transport: " + toString( bpm ) );
+
+ m_transport.m_nBPM = bpm;
+
+ must_relocate = 1; // The tempo change has happened somewhere during the previous cycle; relocate right away.
+
+ // Hydrogen::getInstance()->setBPM( m_JackTransportPos.beats_per_minute ); // unnecessary, as Song->m_BPM gets updated in audioEngine_process_transport (after calling this function)
}
}
-*/
- if ( m_transport.m_nFrames != m_JackTransportPos.frame ) {
- m_transport.m_nFrames = m_JackTransportPos.frame;
- warningLog( "[updateTransportInfo] internal frames != jack transport frames. resync!" );
+ if ( m_transport.m_nFrames + bbt_frame_offset != m_JackTransportPos.frame ) {
+ if ( ( m_JackTransportPos.valid & JackPositionBBT ) && must_relocate == 0 ) {
+ warningLog( "Frame offset mismatch; triggering resync in 2 cycles" );
+ must_relocate = 2;
+ } else { // NOTE There's no timebase_master. If audioEngine_process_checkBPMChanged handled a tempo change during last cycle, the offset doesn't match.
+ m_transport.m_nFrames = m_JackTransportPos.frame - bbt_frame_offset;
+// bbt_frame_offset = 0;
+ }
}
+ if ( must_relocate == 1 ) {
+ warningLog( "Resyncing!" );
+ relocateBBT();
+ }
+
+ if ( must_relocate > 0 ) must_relocate--;
}
}
@@ -242,6 +326,11 @@ int JackDriver::init(unsigned nBufferSize)
output_port_name_1 = Preferences::getInstance()->m_sJackPortName1;
output_port_name_2 = Preferences::getInstance()->m_sJackPortName2;
+ if ( ( client = jack_client_open( "hydrogen", JackNullOption, NULL ) ) == NULL ) {
+ warningLog( "Error: can't start JACK server" );
+ return 3;
+ }
+
// check if another hydrogen instance is connected to jack
if ( (client = jack_client_new( "hydrogen-tmp" ) ) == 0 ) {
warningLog("Jack server not running?");
@@ -256,7 +345,7 @@ int JackDriver::init(unsigned nBufferSize)
int nColonPos = sPort.find( ":" );
string sClient = sPort.substr( 0, nColonPos );
bool bClientExist = false;
- for ( int j = 0; j < clientList.size(); j++ ) {
+ for ( int j = 0; j < (int)clientList.size(); j++ ) {
if ( sClient == clientList[ j ] ) {
bClientExist = true;
break;
@@ -267,6 +356,7 @@ int JackDriver::init(unsigned nBufferSize)
}
nPort++;
}
+ free(readports);
jack_client_close( client );
string sClientName = "";
@@ -275,7 +365,7 @@ int JackDriver::init(unsigned nBufferSize)
// sprintf( clientName, "Hydrogen-%d", getpid() );
sClientName = "Hydrogen-" + toString( nInstance );
bool bExist = false;
- for ( int i = 0; i < clientList.size(); i++ ) {
+ for ( int i = 0; i < (int)clientList.size(); i++ ) {
if ( sClientName == clientList[ i ] ){
bExist = true;
break;
@@ -325,25 +415,6 @@ int JackDriver::init(unsigned nBufferSize)
return 4;
}
-
- /* create MAX_INSTRUMENTS dedicated channel output ports */
- if (track_out_flag) {
- char tmpbuf[255];
-
- for (unsigned int n=0; n < MAX_INSTRUMENTS; ++n) {
- snprintf (tmpbuf, sizeof(tmpbuf), "track_out_%d_L", n+1);
- track_output_ports_L[n] = jack_port_register ( client, tmpbuf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 );
- if (track_output_ports_L[n] == NULL) {
- ( Hydrogen::getInstance() )->raiseError( Hydrogen::JACK_ERROR_IN_PORT_REGISTER );
- }
-
- snprintf (tmpbuf, sizeof(tmpbuf), "track_out_%d_R", n+1);
- track_output_ports_R[n] = jack_port_register ( client, tmpbuf, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 );
- if (track_output_ports_R[n] == NULL) {
- ( Hydrogen::getInstance() )->raiseError( Hydrogen::JACK_ERROR_IN_PORT_REGISTER );
- }
- }
- }
// clear buffers
// jack_default_audio_sample_t *out_L = (jack_default_audio_sample_t *) jack_port_get_buffer (output_port_1, jack_server_bufferSize);

View File

@ -1,41 +0,0 @@
$OpenBSD: patch-src_lib_drivers_JackDriver_h,v 1.1 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/drivers/JackDriver.h.orig Fri Feb 29 18:19:39 2008
+++ src/lib/drivers/JackDriver.h Sat Mar 1 00:07:56 2008
@@ -36,7 +36,8 @@
#include <jack/jack.h>
#include <jack/transport.h>
-#include "../Globals.h"\
+#include "../Globals.h"
+#include "lib/Hydrogen.h"
///
/// Jack (Jack Audio Connection Kit) server driver
@@ -59,7 +60,6 @@ class JackDriver : public GenericDriver
unsigned getSampleRate();
-
jack_transport_state_t getTransportState() { return m_JackTransportState; }
jack_position_t getTransportPos() { return m_JackTransportPos; }
@@ -81,13 +81,19 @@ class JackDriver : public GenericDriver
virtual void locate( unsigned long nFrame );
virtual void updateTransportInfo();
virtual void setBpm(float fBPM);
+ void calculateFrameOffset();
private:
+ void relocateBBT();
+ long long bbt_frame_offset;
+ int must_relocate;
+
JackProcessCallback processCallback;
jack_port_t *output_port_1;
jack_port_t *output_port_2;
string output_port_name_1;
string output_port_name_2;
+ int track_port_count;
jack_port_t *track_output_ports_L[MAX_INSTRUMENTS];
jack_port_t *track_output_ports_R[MAX_INSTRUMENTS];

View File

@ -1,42 +0,0 @@
$OpenBSD: patch-src_lib_drivers_OssDriver_cpp,v 1.3 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/drivers/OssDriver.cpp.orig Mon Oct 17 15:32:04 2005
+++ src/lib/drivers/OssDriver.cpp Sat Mar 1 00:48:07 2008
@@ -41,6 +41,7 @@ unsigned nNextFrames = 0;
void* ossDriver_processCaller(void* param)
{
+#ifndef __OpenBSD__
// stolen from amSynth
struct sched_param sched;
sched.sched_priority = 50;
@@ -50,6 +51,7 @@ void* ossDriver_processCaller(void* param)
m_pOssDriverInstance->warningLog("Can't set realtime scheduling for OSS Driver");
}
m_pOssDriverInstance->infoLog( "Scheduling priority = " + toString( sched.sched_priority ) );
+#endif
OssDriver *ossDriver = (OssDriver*)param;
@@ -126,7 +128,7 @@ int OssDriver::connect() {
int bs;
string audioDevice;
-#ifdef __NetBSD__
+#if defined(__NetBSD__)
audioDevice = "/dev/audio";
#else
audioDevice = preferencesMng->m_sOSSDevice;
@@ -178,11 +180,13 @@ int OssDriver::connect() {
infoLog( "Blocksize audio = " + toString( bs ) );
+#ifndef __OpenBSD__
if (bs != ( 1 << bufferBits) ){
errorLog("ERROR_IOCTL: unable to set BlockSize");
close(fd);
return 1;
}
+#endif
int format = AFMT_S16_LE;
if (ioctl(fd, SNDCTL_DSP_SETFMT, &format) == -1) {

View File

@ -1,12 +0,0 @@
$OpenBSD: patch-src_lib_drivers_OssDriver_h,v 1.1.1.1 2006/09/25 18:56:00 grange Exp $
--- src/lib/drivers/OssDriver.h.orig Sun Sep 24 23:55:12 2006
+++ src/lib/drivers/OssDriver.h Sun Sep 24 23:55:42 2006
@@ -34,7 +34,7 @@
#ifdef OSS_SUPPORT
-#ifdef __NetBSD__
+#if defined(__NetBSD__) || defined(__OpenBSD__)
#include <soundcard.h>
#else
#include <sys/soundcard.h>

View File

@ -1,21 +0,0 @@
$OpenBSD: patch-src_lib_fx_LadspaFX_cpp,v 1.3 2008/03/24 03:09:42 jakemsr Exp $
--- src/lib/fx/LadspaFX.cpp.orig Tue Nov 22 14:57:34 2005
+++ src/lib/fx/LadspaFX.cpp Sat Mar 1 00:55:49 2008
@@ -449,7 +449,7 @@ vector<LadspaFXInfo*> LadspaFX::getPluginList()
QDir dir( QString( sPluginDir.c_str() ) );
if (!dir.exists()) {
//Logger::getInstance()->log( "[LadspaFX::getPluginList] directory " + sPluginDir + " not found" );
- return pluginList;
+ continue;
}
Logger::getInstance()->log( "[LadspaFX::getPluginList] reading directory: " + sPluginDir );
@@ -592,7 +592,7 @@ void LadspaFX::getRDF(LadspaFXGroup *pGroup, vector<La
{
lrdf_init();
- string sDir = "/usr/share/ladspa/rdf";
+ string sDir = string(CONFIG_PREFIX) + "/share/ladspa/rdf";
QDir dir( QString( sDir.c_str() ) );
if (!dir.exists()) {

View File

@ -1,4 +0,0 @@
@comment $OpenBSD: PFRAG.shared,v 1.1.1.1 2006/09/25 18:56:01 grange Exp $
lib/hydrogen/plugins/wasp_booster.so
lib/hydrogen/plugins/wasp_noisifier.so
lib/hydrogen/plugins/wasp_xshaper.so

View File

@ -1,9 +1,6 @@
@comment $OpenBSD: PLIST,v 1.1.1.1 2006/09/25 18:56:01 grange Exp $
%%SHARED%%
bin/hydrogen
bin/hydrogenPlayer
lib/hydrogen/
lib/hydrogen/plugins/
@comment $OpenBSD: PLIST,v 1.2 2010/01/11 05:11:32 jakemsr Exp $
@bin bin/hydrogen
share/applications/hydrogen.desktop
share/hydrogen/
share/hydrogen/data/
share/hydrogen/data/DefaultSong.h2song
@ -17,6 +14,8 @@ share/hydrogen/data/demo_songs/GM_kit_demo3.h2song
share/hydrogen/data/demo_songs/TR808kit-demo.h2song
share/hydrogen/data/demo_songs/tutorial_georgyporgy.h2song
share/hydrogen/data/doc/
share/hydrogen/data/doc/Makefile
share/hydrogen/data/doc/README.DOCUMENTATION.txt
share/hydrogen/data/doc/img/
share/hydrogen/data/doc/img/AudioEngineInfoDialog.png
share/hydrogen/data/doc/img/CreateNewPattern.png
@ -37,6 +36,7 @@ share/hydrogen/data/doc/img/MixerFX.png
share/hydrogen/data/doc/img/MixerFXButton.png
share/hydrogen/data/doc/img/MixerFXEdit.png
share/hydrogen/data/doc/img/MixerFXEditButton.png
share/hydrogen/data/doc/img/MixerFXKnob.png
share/hydrogen/data/doc/img/MixerFXSelect.png
share/hydrogen/data/doc/img/MixerLED.png
share/hydrogen/data/doc/img/MixerLoadSample.png
@ -78,6 +78,7 @@ share/hydrogen/data/doc/img/background_Mode.png
share/hydrogen/data/doc/img/bg_topPanel.png
share/hydrogen/data/doc/img/bpm.png
share/hydrogen/data/doc/img/btn_clear_off.png
share/hydrogen/data/doc/img/btn_draw.png
share/hydrogen/data/doc/img/btn_edit_on.png
share/hydrogen/data/doc/img/btn_hear_on.png
share/hydrogen/data/doc/img/btn_live_on.png
@ -85,10 +86,15 @@ share/hydrogen/data/doc/img/btn_loop_on.png
share/hydrogen/data/doc/img/btn_mute_on.png
share/hydrogen/data/doc/img/btn_new_on.png
share/hydrogen/data/doc/img/btn_on_on.png
share/hydrogen/data/doc/img/btn_pattern_mode.png
share/hydrogen/data/doc/img/btn_play_on.png
share/hydrogen/data/doc/img/btn_play_on_mixer.png
share/hydrogen/data/doc/img/btn_quant_off.png
share/hydrogen/data/doc/img/btn_quant_on.png
share/hydrogen/data/doc/img/btn_quant_over.png
share/hydrogen/data/doc/img/btn_record_off.png
share/hydrogen/data/doc/img/btn_record_over.png
share/hydrogen/data/doc/img/btn_select.png
share/hydrogen/data/doc/img/btn_select_off.png
share/hydrogen/data/doc/img/btn_select_on.png
share/hydrogen/data/doc/img/btn_solo_on.png
@ -150,31 +156,32 @@ share/hydrogen/data/doc/img_tutorial/VerseBridge.png
share/hydrogen/data/doc/img_tutorial/VerseBridge_hh.png
share/hydrogen/data/doc/infoSplash/
share/hydrogen/data/doc/infoSplash/aboutLogo.png
share/hydrogen/data/doc/infoSplash/news-051113.html
share/hydrogen/data/doc/infoSplash/news-070620.html
share/hydrogen/data/doc/infoSplash/news-081104.html
share/hydrogen/data/doc/man/
share/hydrogen/data/doc/man/C/
share/hydrogen/data/doc/man/C/hydrogen.1
share/hydrogen/data/doc/man/ru/
share/hydrogen/data/doc/man/ru/hydrogen.1
share/hydrogen/data/doc/manual.docbook
share/hydrogen/data/doc/manual.html
share/hydrogen/data/doc/manual_de.html
share/hydrogen/data/doc/manual_en.docbook
share/hydrogen/data/doc/manual.pot
share/hydrogen/data/doc/manual_ca.html
share/hydrogen/data/doc/manual_ca.po
share/hydrogen/data/doc/manual_en.html
share/hydrogen/data/doc/manual_es.docbook
share/hydrogen/data/doc/manual_es.html
share/hydrogen/data/doc/manual_fr.docbook
share/hydrogen/data/doc/manual_es.po
share/hydrogen/data/doc/manual_fr.html
share/hydrogen/data/doc/manual_it.docbook
share/hydrogen/data/doc/manual_fr.po
share/hydrogen/data/doc/manual_it.html
share/hydrogen/data/doc/manual_nl.docbook
share/hydrogen/data/doc/manual_it.po
share/hydrogen/data/doc/manual_nl.html
share/hydrogen/data/doc/tutorial_en.docbook
share/hydrogen/data/doc/manual_nl.po
share/hydrogen/data/doc/tutorial.docbook
share/hydrogen/data/doc/tutorial.pot
share/hydrogen/data/doc/tutorial_en.html
share/hydrogen/data/doc/tutorial_fr.docbook
share/hydrogen/data/doc/tutorial_fr.html
share/hydrogen/data/doc/tutorial_it.docbook
share/hydrogen/data/doc/tutorial_fr.po
share/hydrogen/data/doc/tutorial_it.html
share/hydrogen/data/doc/updateManuals.sh
share/hydrogen/data/doc/tutorial_it.po
share/hydrogen/data/drumkits/
share/hydrogen/data/drumkits/GMkit/
share/hydrogen/data/drumkits/GMkit/clap_Dry_c.flac
@ -215,13 +222,17 @@ share/hydrogen/data/drumkits/TR808EmulationKit/808_Tom_Mid.flac
share/hydrogen/data/drumkits/TR808EmulationKit/drumkit.xml
share/hydrogen/data/emptySample.wav
share/hydrogen/data/hydrogen.default.conf
@comment share/hydrogen/data/hydrogen.default.conf.orig
share/hydrogen/data/i18n/
share/hydrogen/data/i18n/hydrogen.ca.ts
share/hydrogen/data/i18n/hydrogen.de.qm
share/hydrogen/data/i18n/hydrogen.de.ts
share/hydrogen/data/i18n/hydrogen.es.qm
share/hydrogen/data/i18n/hydrogen.es.ts
share/hydrogen/data/i18n/hydrogen.fr.qm
share/hydrogen/data/i18n/hydrogen.fr.ts
share/hydrogen/data/i18n/hydrogen.hr.qm
share/hydrogen/data/i18n/hydrogen.hr.ts
share/hydrogen/data/i18n/hydrogen.hu_HU.qm
share/hydrogen/data/i18n/hydrogen.hu_HU.ts
share/hydrogen/data/i18n/hydrogen.it.qm
@ -236,12 +247,35 @@ share/hydrogen/data/i18n/hydrogen.pt_BR.qm
share/hydrogen/data/i18n/hydrogen.pt_BR.ts
share/hydrogen/data/i18n/hydrogen.ru.qm
share/hydrogen/data/i18n/hydrogen.ru.ts
share/hydrogen/data/i18n/updateTranslations.sh
share/hydrogen/data/i18n/hydrogen.sv.qm
share/hydrogen/data/i18n/hydrogen.sv.ts
@comment share/hydrogen/data/i18n/stats.py
@comment share/hydrogen/data/i18n/updateTranslations.sh
share/hydrogen/data/img/
share/hydrogen/data/img/gray/
share/hydrogen/data/img/gray/about/
share/hydrogen/data/img/gray/about/aboutLogo.png
share/hydrogen/data/img/gray/icon.svg
share/hydrogen/data/img/gray/audiFileBrowser/
share/hydrogen/data/img/gray/audiFileBrowser/go-home.png
share/hydrogen/data/img/gray/audiFileBrowser/go-up.png
share/hydrogen/data/img/gray/audiFileBrowser/player_play.png
share/hydrogen/data/img/gray/audiFileBrowser/player_stop.png
share/hydrogen/data/img/gray/drumkitManager/
share/hydrogen/data/img/gray/drumkitManager/background_options.png
share/hydrogen/data/img/gray/drumkitManager/btn_export_off.png
share/hydrogen/data/img/gray/drumkitManager/btn_export_on.png
share/hydrogen/data/img/gray/drumkitManager/btn_export_over.png
share/hydrogen/data/img/gray/drumkitManager/btn_import_off.png
share/hydrogen/data/img/gray/drumkitManager/btn_import_on.png
share/hydrogen/data/img/gray/drumkitManager/btn_import_over.png
share/hydrogen/data/img/gray/drumkitManager/btn_new_off.png
share/hydrogen/data/img/gray/drumkitManager/btn_new_on.png
share/hydrogen/data/img/gray/drumkitManager/btn_new_over.png
share/hydrogen/data/img/gray/drumkitManager/btn_save_off.png
share/hydrogen/data/img/gray/drumkitManager/btn_save_on.png
share/hydrogen/data/img/gray/drumkitManager/btn_save_over.png
@comment share/hydrogen/data/img/gray/h2-icon.svg
@comment share/hydrogen/data/img/gray/icon.svg
share/hydrogen/data/img/gray/icon16.png
share/hydrogen/data/img/gray/icon24.png
share/hydrogen/data/img/gray/icon32.png
@ -255,13 +289,12 @@ share/hydrogen/data/img/gray/instrumentEditor/deleteLayer_off.png
share/hydrogen/data/img/gray/instrumentEditor/deleteLayer_on.png
share/hydrogen/data/img/gray/instrumentEditor/deleteLayer_over.png
share/hydrogen/data/img/gray/instrumentEditor/instrumentTab.png
share/hydrogen/data/img/gray/instrumentEditor/instrument_off.png
share/hydrogen/data/img/gray/instrumentEditor/instrument_on.png
share/hydrogen/data/img/gray/instrumentEditor/instrument_over.png
share/hydrogen/data/img/gray/instrumentEditor/instrumentTab_top.png
share/hydrogen/data/img/gray/instrumentEditor/instrument_show_off.png
share/hydrogen/data/img/gray/instrumentEditor/instrument_show_on.png
share/hydrogen/data/img/gray/instrumentEditor/layerTab.png
share/hydrogen/data/img/gray/instrumentEditor/layers_off.png
share/hydrogen/data/img/gray/instrumentEditor/layers_on.png
share/hydrogen/data/img/gray/instrumentEditor/layers_over.png
share/hydrogen/data/img/gray/instrumentEditor/library_show_off.png
share/hydrogen/data/img/gray/instrumentEditor/library_show_on.png
share/hydrogen/data/img/gray/instrumentEditor/loadLayer_off.png
share/hydrogen/data/img/gray/instrumentEditor/loadLayer_on.png
share/hydrogen/data/img/gray/instrumentEditor/loadLayer_over.png
@ -270,7 +303,7 @@ share/hydrogen/data/img/gray/lcd/
share/hydrogen/data/img/gray/lcd/LCDLargeFontSet.png
share/hydrogen/data/img/gray/lcd/LCDLargeGrayFontSet.png
share/hydrogen/data/img/gray/lcd/LCDSmallBlueFontSet.png
share/hydrogen/data/img/gray/lcd/LCDSmallFontSetRed.xcf
@comment share/hydrogen/data/img/gray/lcd/LCDSmallFontSetRed.xcf
share/hydrogen/data/img/gray/lcd/LCDSmallGrayFontSet.png
share/hydrogen/data/img/gray/lcd/LCDSmallRedFontSet.png
share/hydrogen/data/img/gray/lcd/LCDSpinBox_down_off.png
@ -337,57 +370,55 @@ share/hydrogen/data/img/gray/mixerPanel/showPeaks_on.png
share/hydrogen/data/img/gray/mixerPanel/showPeaks_over.png
share/hydrogen/data/img/gray/patternEditor/
share/hydrogen/data/img/gray/patternEditor/background_channel.png
share/hydrogen/data/img/gray/patternEditor/background_name.png
share/hydrogen/data/img/gray/patternEditor/background_rec-new.png
share/hydrogen/data/img/gray/patternEditor/background_rec.png
share/hydrogen/data/img/gray/patternEditor/background_res-new.png
share/hydrogen/data/img/gray/patternEditor/background_res.png
share/hydrogen/data/img/gray/patternEditor/background_zoom-new.png
share/hydrogen/data/img/gray/patternEditor/background_zoom.png
share/hydrogen/data/img/gray/patternEditor/btn_dropdown_off.png
share/hydrogen/data/img/gray/patternEditor/btn_dropdown_on.png
share/hydrogen/data/img/gray/patternEditor/btn_dropdown_over.png
share/hydrogen/data/img/gray/patternEditor/btn_hear_off.png
share/hydrogen/data/img/gray/patternEditor/btn_hear_on.png
share/hydrogen/data/img/gray/patternEditor/btn_hear_over.png
share/hydrogen/data/img/gray/patternEditor/btn_mute_off.png
share/hydrogen/data/img/gray/patternEditor/btn_mute_on.png
share/hydrogen/data/img/gray/patternEditor/btn_quant_off.png
share/hydrogen/data/img/gray/patternEditor/btn_quant_on.png
share/hydrogen/data/img/gray/patternEditor/btn_quant_over.png
share/hydrogen/data/img/gray/patternEditor/btn_record_off.png
share/hydrogen/data/img/gray/patternEditor/btn_record_on.png
share/hydrogen/data/img/gray/patternEditor/btn_record_over.png
share/hydrogen/data/img/gray/patternEditor/editor_background.png
share/hydrogen/data/img/gray/patternEditor/hearBtn_off.png
share/hydrogen/data/img/gray/patternEditor/hearBtn_on.png
share/hydrogen/data/img/gray/patternEditor/hearBtn_over.png
share/hydrogen/data/img/gray/patternEditor/patternEditor_background.png
share/hydrogen/data/img/gray/patternEditor/pianoBtn_off.png
share/hydrogen/data/img/gray/patternEditor/pianoBtn_on.png
share/hydrogen/data/img/gray/patternEditor/pianoBtn_over.png
share/hydrogen/data/img/gray/patternEditor/quantBtn_off.png
share/hydrogen/data/img/gray/patternEditor/quantBtn_on.png
share/hydrogen/data/img/gray/patternEditor/quantBtn_over.png
share/hydrogen/data/img/gray/patternEditor/recBtn_off.png
share/hydrogen/data/img/gray/patternEditor/recBtn_on.png
share/hydrogen/data/img/gray/patternEditor/recBtn_over.png
share/hydrogen/data/img/gray/patternEditor/btn_solo_off.png
share/hydrogen/data/img/gray/patternEditor/btn_solo_on.png
share/hydrogen/data/img/gray/patternEditor/editor_top.png
share/hydrogen/data/img/gray/patternEditor/instrument_line.png
share/hydrogen/data/img/gray/patternEditor/instrument_line_selected.png
share/hydrogen/data/img/gray/patternEditor/tickPosition.png
share/hydrogen/data/img/gray/patternEditor/velBtn_off.png
share/hydrogen/data/img/gray/patternEditor/velBtn_on.png
share/hydrogen/data/img/gray/patternEditor/velBtn_over.png
share/hydrogen/data/img/gray/playerControlPanel/
share/hydrogen/data/img/gray/playerControlPanel/background.png
share/hydrogen/data/img/gray/playerControlPanel/background_BPM.png
share/hydrogen/data/img/gray/playerControlPanel/background_Control.png
share/hydrogen/data/img/gray/playerControlPanel/background_Jack.png
share/hydrogen/data/img/gray/playerControlPanel/background_Mode.png
share/hydrogen/data/img/gray/playerControlPanel/bbt_off.png
share/hydrogen/data/img/gray/playerControlPanel/bbt_on.png
share/hydrogen/data/img/gray/playerControlPanel/bc_off.old.png
share/hydrogen/data/img/gray/playerControlPanel/bc_off.png
share/hydrogen/data/img/gray/playerControlPanel/bc_on.old.png
share/hydrogen/data/img/gray/playerControlPanel/bc_on.png
share/hydrogen/data/img/gray/playerControlPanel/beatConter_BG.png
share/hydrogen/data/img/gray/playerControlPanel/btn_ffwd_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_ffwd_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_ffwd_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_live_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_live_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_live_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_loop_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_loop_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_loop_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_metronome_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_metronome_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_metronome_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_mmc_space_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_mmc_space_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_mode_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_mode_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_mode_over.png
@ -397,6 +428,23 @@ share/hydrogen/data/img/gray/playerControlPanel/btn_play_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_rwd_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_rwd_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_rwd_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_set_play_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_set_play_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showDrumkitManager_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showDrumkitManager_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showDrumkitManager_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showInstrumentEditor_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showInstrumentEditor_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showInstrumentEditor_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showMixer_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showMixer_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showMixer_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showPatternEditor_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showPatternEditor_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showPatternEditor_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showSongEditor_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showSongEditor_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_showSongEditor_over.png
share/hydrogen/data/img/gray/playerControlPanel/btn_stop_off.png
share/hydrogen/data/img/gray/playerControlPanel/btn_stop_on.png
share/hydrogen/data/img/gray/playerControlPanel/btn_stop_over.png
@ -406,16 +454,27 @@ share/hydrogen/data/img/gray/playerControlPanel/icn_metronome_off.png
share/hydrogen/data/img/gray/playerControlPanel/icn_metronome_on.png
share/hydrogen/data/img/gray/playerControlPanel/icn_pause.png
share/hydrogen/data/img/gray/playerControlPanel/icn_play.png
share/hydrogen/data/img/gray/playerControlPanel/jackMasterBtn_off.png
share/hydrogen/data/img/gray/playerControlPanel/jackMasterBtn_on.png
share/hydrogen/data/img/gray/playerControlPanel/jackMasterBtn_over.png
share/hydrogen/data/img/gray/playerControlPanel/jackTransportBtn_off.png
share/hydrogen/data/img/gray/playerControlPanel/jackTransportBtn_on.png
share/hydrogen/data/img/gray/playerControlPanel/jackTransportBtn_over.png
share/hydrogen/data/img/gray/playerControlPanel/lcd_background.png
share/hydrogen/data/img/gray/playerControlPanel/metronome_down.png
share/hydrogen/data/img/gray/playerControlPanel/metronome_off.png
share/hydrogen/data/img/gray/playerControlPanel/metronome_up.png
share/hydrogen/data/img/gray/playerControlPanel/midiActivity_back.png
share/hydrogen/data/img/gray/playerControlPanel/midiActivity_on.png
share/hydrogen/data/img/gray/playerControlPanel/onoff.png
share/hydrogen/data/img/gray/playerControlPanel/playlist_background_Control.png
share/hydrogen/data/img/gray/playerControlPanel/statusLED_off.png
share/hydrogen/data/img/gray/playerControlPanel/statusLED_on.png
share/hydrogen/data/img/gray/preferencesDialog/
share/hydrogen/data/img/gray/preferencesDialog/rec.png
share/hydrogen/data/img/gray/skin_btn_off.png
share/hydrogen/data/img/gray/skin_btn_on.png
share/hydrogen/data/img/gray/skin_btn_over.png
share/hydrogen/data/img/gray/songEditor/
share/hydrogen/data/img/gray/songEditor/bg_topPanel.png
share/hydrogen/data/img/gray/songEditor/btn_clear_off.png
@ -430,6 +489,12 @@ share/hydrogen/data/img/gray/songEditor/btn_draw_over.png
share/hydrogen/data/img/gray/songEditor/btn_followPH_off.png
share/hydrogen/data/img/gray/songEditor/btn_followPH_on.png
share/hydrogen/data/img/gray/songEditor/btn_followPH_over.png
share/hydrogen/data/img/gray/songEditor/btn_minus_off.png
share/hydrogen/data/img/gray/songEditor/btn_minus_on.png
share/hydrogen/data/img/gray/songEditor/btn_minus_over.png
share/hydrogen/data/img/gray/songEditor/btn_mode_off.png
share/hydrogen/data/img/gray/songEditor/btn_mode_on.png
share/hydrogen/data/img/gray/songEditor/btn_mode_over.png
share/hydrogen/data/img/gray/songEditor/btn_new_off.png
share/hydrogen/data/img/gray/songEditor/btn_new_on.png
share/hydrogen/data/img/gray/songEditor/btn_new_over.png
@ -439,7 +504,6 @@ share/hydrogen/data/img/gray/songEditor/btn_select_over.png
share/hydrogen/data/img/gray/songEditor/btn_up_off.png
share/hydrogen/data/img/gray/songEditor/btn_up_on.png
share/hydrogen/data/img/gray/songEditor/btn_up_over.png
share/hydrogen/data/img/gray/songEditor/patternIcon.png
share/hydrogen/data/img/gray/songEditor/playingPattern_off.png
share/hydrogen/data/img/gray/songEditor/playingPattern_on.png
share/hydrogen/data/img/gray/songEditor/songEditorLabelABG.png
@ -449,3 +513,25 @@ share/hydrogen/data/img/gray/splash/
share/hydrogen/data/img/gray/splash/splash.png
share/hydrogen/data/img/gray/waveDisplay/
share/hydrogen/data/img/gray/waveDisplay/background.png
share/hydrogen/data/img/gray/waveDisplay/bgsamplewavedisplay.png
@comment share/hydrogen/data/new_tutorial/
@comment share/hydrogen/data/new_tutorial/img_tutorial/
@comment share/hydrogen/data/new_tutorial/img_tutorial/Bridge1_4th.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/Bridge3_3a_hh.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/C3_6+7.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/Intro4th.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/PatternBase1.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/PatternBase2.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/Riff1b.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/Riff1c.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/Riff1d.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/Verse8th.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/VerseAll.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/VerseBridge.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/VerseBridge_hh.png
@comment share/hydrogen/data/new_tutorial/img_tutorial/warn.png
@comment share/hydrogen/data/new_tutorial/tutorial_en.html
share/pixmaps/
share/pixmaps/h2-icon.svg
@exec %D/bin/update-desktop-database
@unexec-delete %D/bin/update-desktop-database