Assists music production by grouping standalone programs into sessions. Community version of "Non Session Manager".
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

753 lines
15KB

  1. /*******************************************************************************/
  2. /* Copyright (C) 2007-2008 Jonathan Moore Liles */
  3. /* */
  4. /* This program is free software; you can redistribute it and/or modify it */
  5. /* under the terms of the GNU General Public License as published by the */
  6. /* Free Software Foundation; either version 2 of the License, or (at your */
  7. /* option) any later version. */
  8. /* */
  9. /* This program is distributed in the hope that it will be useful, but WITHOUT */
  10. /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
  11. /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */
  12. /* more details. */
  13. /* */
  14. /* You should have received a copy of the GNU General Public License along */
  15. /* with This program; see the file COPYING. If not,write to the Free Software */
  16. /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  17. /*******************************************************************************/
  18. #include "pattern.H"
  19. #include "non.H"
  20. #include "common.h"
  21. #include "smf.H"
  22. #include "jack.H"
  23. #include "transport.H"
  24. #include <math.h>
  25. int pattern::note_shape = SQUARE;
  26. event_list pattern::_recorded_events;
  27. vector <pattern*> pattern::_patterns;
  28. int pattern::_solo;
  29. int pattern::_pattern_recording;
  30. signal <void> pattern::signal_create_destroy;
  31. pattern::pattern ( void )
  32. {
  33. viewport.h = 32;
  34. viewport.w = 32;
  35. viewport.y = 64 - ( viewport.h + ( viewport.h / 2 ) );
  36. _channel = _port = 0;
  37. _ppqn = 4;
  38. _bpb = 4;
  39. _note = 8;
  40. _queued = -1;
  41. int _bars = 2;
  42. // we need to reinitalize this.
  43. data *d = const_cast< data * >( _rd );
  44. d->length = x_to_ts( _bpb * _ppqn * _bars );
  45. // mapping.open( Mapping::INSTRUMENT, "Default" );
  46. mapping.open( Mapping::SCALE, "Major" );
  47. _add();
  48. char *s;
  49. asprintf( &s, "Pattern %d", number() );
  50. name( s );
  51. }
  52. void
  53. pattern::_add ( void )
  54. {
  55. // keep track of all the patterns
  56. pattern::_patterns.push_back( this );
  57. _number = patterns();
  58. signal_create_destroy();
  59. }
  60. pattern::~pattern ( void )
  61. {
  62. DMESSAGE( "deleting pattern %d", number() );
  63. signal_create_destroy();
  64. }
  65. /* copy constructor */
  66. pattern::pattern ( const pattern &rhs ) : Grid( rhs )
  67. {
  68. _note = rhs._note;
  69. _port = rhs._port;
  70. _channel = rhs._channel;
  71. _queued = rhs._queued;
  72. mapping = rhs.mapping;
  73. _add();
  74. }
  75. pattern *
  76. pattern::clone ( void )
  77. {
  78. return new pattern( *this );
  79. }
  80. /******************/
  81. /* Static methods */
  82. /******************/
  83. int
  84. pattern::solo ( void )
  85. {
  86. return pattern::_solo;
  87. }
  88. int
  89. pattern::patterns ( void )
  90. {
  91. return pattern::_patterns.size();
  92. }
  93. // this is the static one
  94. pattern *
  95. pattern::pattern_by_number ( int n )
  96. {
  97. if ( n <= patterns() && n > 0 )
  98. {
  99. return pattern::_patterns[ n - 1 ];
  100. }
  101. return NULL;
  102. }
  103. /** delete all patterns in preparation for a reload */
  104. void
  105. pattern::reset ( void )
  106. {
  107. for ( int n = pattern::patterns(); n-- ; )
  108. {
  109. delete pattern::_patterns.back();
  110. pattern::_patterns.pop_back();
  111. }
  112. }
  113. /* records a MIDI event into a temporary buffer. It'll only be
  114. * permanently added to pattern after recording stops or the pattern
  115. * loops. */
  116. void
  117. pattern::record_event ( const midievent *me )
  118. {
  119. /* set the events aside in a dedicated list--the recording pattern
  120. * will decide what to do with them the next time around the
  121. * loop */
  122. /* FIXME: how does the pattern decide when to loop? It seems
  123. reasonable that /merge/ and /replace/ modes should be bound to
  124. the previous pattern length, but what about "NEW" mode? Should it
  125. just use this entire list as a new pattern (of whatever length)
  126. when recording is halted? */
  127. event *e = new event;
  128. *e = *me;
  129. pattern::_recorded_events.append( e );
  130. record_mode_e mode = config.record_mode;
  131. if ( mode == OVERWRITE || mode == LAYER )
  132. {
  133. pattern *p = pattern::recording();
  134. if ( ! p->_cleared )
  135. {
  136. if ( mode == LAYER )
  137. {
  138. p->record_stop();
  139. p = p->clone();
  140. p->record( 0 );
  141. }
  142. p->clear();
  143. p->_cleared = true;
  144. }
  145. mode = MERGE;
  146. }
  147. /* let's fill in the pattern 'live' in merge mode. looks a little
  148. complicated because we have to wait for a note-off before it's
  149. safe to insert */
  150. if ( mode == MERGE || mode == NEW )
  151. {
  152. pattern *p = pattern::recording();
  153. p->lock();
  154. event_list *el = &pattern::_recorded_events;
  155. if ( e->is_note_off() )
  156. {
  157. event *off = e;
  158. for ( event *on = el->last(); on; on = on->prev() )
  159. {
  160. if ( on->is_note_on() &&
  161. on->is_same_note( off ) )
  162. // &&
  163. // *on < *e )
  164. {
  165. el->unlink( on );
  166. el->unlink( off );
  167. tick_t duration = off->timestamp() - on->timestamp();
  168. /* place within loop */
  169. on->timestamp(
  170. fmod( on->timestamp() - p->_start, p->_rw->length ) );
  171. on->link( off );
  172. on->note_duration( duration );
  173. p->_rw->events.mix( on );
  174. break;
  175. }
  176. }
  177. }
  178. else
  179. if ( ! e->is_note_on() )
  180. {
  181. // if ( ! filter )
  182. e->timestamp( fmod( e->timestamp(), p->_rw->length ) );
  183. el->unlink( e );
  184. p->_rw->events.insert( e );
  185. }
  186. p->_suspend_update = true;
  187. p->unlock();
  188. p->_suspend_update = false;
  189. }
  190. }
  191. pattern *
  192. pattern::recording ( void )
  193. {
  194. return pattern::pattern_by_number( pattern::_pattern_recording );
  195. }
  196. /*******************/
  197. /* Virtual Methods */
  198. /*******************/
  199. /* allows us to create a new pattern/phrase from a base class pointer */
  200. pattern *
  201. pattern::create ( void )
  202. {
  203. if ( pattern::patterns() < 128 )
  204. {
  205. return new pattern;
  206. }
  207. else
  208. return NULL;
  209. }
  210. pattern *
  211. pattern::by_number ( int n ) const
  212. {
  213. return pattern::pattern_by_number( n );
  214. }
  215. void
  216. pattern::put ( int x, int y, tick_t l )
  217. {
  218. l = l ? l : PPQN * 4 / _note;
  219. Grid::put( x, y, l );
  220. if ( ! transport.rolling )
  221. {
  222. /* echo note */
  223. midievent e;
  224. e.status( event::NOTE_ON );
  225. e.channel( _channel );
  226. e.timestamp( l );
  227. e.note( y_to_note( y ) );
  228. e.note_velocity( 64 );
  229. midi_output_immediate_event ( _port, &e );
  230. }
  231. }
  232. const char *
  233. pattern::row_name ( int r ) const
  234. {
  235. return mapping.note_name( y_to_note( r ) );
  236. }
  237. void
  238. pattern::draw_row_names ( Canvas *c ) const
  239. {
  240. for ( int y = 128; y-- ; )
  241. c->draw_row_name( y, mapping.note_name( y_to_note( y ) ), mapping.velocity( y_to_note( y ) ) );
  242. }
  243. void
  244. pattern::trigger ( tick_t start, tick_t end )
  245. {
  246. /* ASSERT( end != -1 && start <= end, "programming error: invalid loop trigger! (%lu-%lu)", start, end ); */
  247. _start = start;
  248. _end = end;
  249. }
  250. /* trigger forever */
  251. void
  252. pattern::trigger ( void )
  253. {
  254. trigger( transport.frame / transport.frames_per_tick, INFINITY );
  255. }
  256. void
  257. pattern::stop ( void ) const
  258. {
  259. _playing = false;
  260. _start = 0;
  261. _end = 0;
  262. _index = 0;
  263. }
  264. void
  265. pattern::mode ( int n )
  266. {
  267. if ( QUEUE == song.play_mode )
  268. {
  269. queue( n );
  270. return;
  271. }
  272. if ( n == SOLO )
  273. {
  274. if ( pattern::_solo )
  275. ((Grid*)pattern::pattern_by_number( pattern::_solo ))->mode( PLAY );
  276. pattern::_solo = _number;
  277. Grid::mode( SOLO );
  278. }
  279. else
  280. {
  281. if ( pattern::_solo == _number )
  282. pattern::_solo = 0;
  283. Grid::mode( n );
  284. }
  285. }
  286. int
  287. pattern::mode ( void ) const
  288. {
  289. if ( pattern::_solo )
  290. {
  291. if ( pattern::_solo == _number )
  292. return SOLO;
  293. else
  294. return MUTE;
  295. }
  296. else
  297. return Grid::mode();
  298. }
  299. /* queue a mode change for the next loop */
  300. void
  301. pattern::queue ( int m )
  302. {
  303. _queued = m;
  304. }
  305. int
  306. pattern::queue ( void ) const
  307. {
  308. return _queued;
  309. }
  310. /* WARNING: runs in the RT thread! */
  311. // output notes from /start/ to /end/ (absolute)
  312. void
  313. pattern::play ( tick_t start, tick_t end ) const
  314. {
  315. /* get our own copy of this pointer so UI thread can change it. */
  316. const data *d = const_cast< const data * >(_rd);
  317. if ( start > _end )
  318. {
  319. stop();
  320. // WARNING( "attempt to play a loop (pattern %d) that has ended (%lu, %lu)", number(), start, _end );
  321. return;
  322. }
  323. else
  324. if ( end < _start )
  325. // not ready yet
  326. return;
  327. if ( start < _start )
  328. start = _start;
  329. if ( end > _end )
  330. end = _end;
  331. // where we are in the absolute time
  332. tick_t tick = start - _start;
  333. int num_played = tick / d->length;
  334. tick_t offset = _start + (d->length * num_played);
  335. const event *e;
  336. _index = fmod( tick, d->length );
  337. bool reset_queued = false;
  338. if ( _index < end - start )
  339. {
  340. /* period covers the beginning of the loop */
  341. DMESSAGE( "%s pattern %d at tick %f (ls: %f, le: %f, o: %f)", _playing ? "Looped" : "Triggered", number(), start, _start, _end, offset );
  342. _cleared = false;
  343. if ( PLAY == _queued || SOLO == _queued )
  344. {
  345. /* set the start point to loop boundary */
  346. start = start - _index;
  347. _mode = _queued;
  348. if ( SOLO == _mode )
  349. {
  350. if ( pattern::_solo )
  351. ((Grid*)pattern::pattern_by_number( pattern::_solo ))->mode( PLAY );
  352. pattern::_solo = _number;
  353. }
  354. else
  355. {
  356. if ( pattern::_solo == _number )
  357. pattern::_solo = 0;
  358. }
  359. reset_queued = true;
  360. }
  361. }
  362. else if ( _index >= d->length - ( end - start ) )
  363. {
  364. if ( MUTE == _queued )
  365. {
  366. /* set the end point to loop boundary */
  367. end = end - _index;
  368. reset_queued = true;
  369. }
  370. }
  371. _playing = true;
  372. if ( mode() == MUTE )
  373. goto done;
  374. try_again:
  375. // pattern is empty
  376. if ( d->events.empty() )
  377. goto done;
  378. for ( e = d->events.first(); e; e = e->next() )
  379. {
  380. // MESSAGE( "s[%ld] -> t[%ld] : %ld, len %ld", start, end, e->timestamp(), _length ); // (*e).print();
  381. tick_t ts = e->timestamp() + offset;
  382. if ( ts >= end )
  383. goto done;
  384. if ( ts >= start )
  385. {
  386. midievent me = *e;
  387. // MESSAGE( "timestamp %d, tick %d, ts - start == %lu", e->timestamp(), start,
  388. // e->timestamp() - start);
  389. /* set the channel */
  390. me.channel( _channel );
  391. /* set the in-cycle timestamp */
  392. me.timestamp ( ts - start );
  393. if ( me.is_note_on() )
  394. {
  395. if ( mapping.translate( &me ) )
  396. midi_output_event( _port, &me, 1 + e->note_duration() );
  397. }
  398. else
  399. if ( me.is_note_off() )
  400. {
  401. if ( mapping.translate( &me ) )
  402. midi_output_event( _port, &me, 0 );
  403. }
  404. else
  405. /* any other event type */
  406. midi_output_event( _port, &me );
  407. }
  408. }
  409. // ran out of events, but there's still some loop left to play.
  410. offset += d->length;
  411. goto try_again;
  412. DMESSAGE( "out of events, resetting to satisfy loop" );
  413. done:
  414. if ( _queued >= 0 && reset_queued )
  415. {
  416. _mode = _queued;
  417. _queued = -1;
  418. }
  419. if ( _end == end )
  420. {
  421. /* we're done playing this trigger */
  422. DMESSAGE( "Pattern %d ended at tick %f (ls: %f, le: %f, o: %f)", number(), end, _start, _end, offset );
  423. stop();
  424. }
  425. }
  426. /* Import /track/ of /f/ as new pattern */
  427. pattern *
  428. pattern::import ( smf *f, int track )
  429. {
  430. if ( ! f->seek_track( track ) )
  431. return NULL;
  432. pattern *p = new pattern;
  433. p->lock();
  434. p->load( f );
  435. /* file could have any notes in it... Use Chromatic scale to
  436. ensure all are visible */
  437. p->mapping.open( Mapping::SCALE, "Chromatic" );
  438. p->unlock();
  439. p->fit();
  440. return p;
  441. }
  442. /** fill pattern from current track of /f/ */
  443. void
  444. pattern::load ( smf *f )
  445. {
  446. lock();
  447. f->read_pattern_info( this );
  448. tick_t len;
  449. list <midievent> *e = f->read_track_events( &len );
  450. /* set channel to channel of first event... */
  451. if ( e->size() )
  452. _channel = e->front().channel();
  453. /* copy events into pattern */
  454. _rw->events = *e;
  455. delete e;
  456. if ( len )
  457. _rw->length = len;
  458. unlock();
  459. // print();
  460. }
  461. /** save (export) pattern to file /name/ */
  462. void
  463. pattern::save ( const char *name ) const
  464. {
  465. smf f;
  466. /* open for writing */
  467. f.open( name, smf::WRITE );
  468. /* writing SMF 0 track */
  469. f.write_header( 0 );
  470. f.open_track( _name, _number );
  471. Grid::dump( &f, _channel );
  472. f.close_track( length() );
  473. }
  474. /** dump pattern as a track in an already open MIDI file */
  475. void
  476. pattern::dump ( smf *f ) const
  477. {
  478. f->open_track( _name, _number );
  479. f->write_pattern_info( this );
  480. Grid::dump( f, _channel );
  481. f->close_track( length() );
  482. }
  483. void
  484. pattern::randomize_row ( int y, int feel, float probability )
  485. {
  486. lock();
  487. int l = PPQN * 4 / _note;
  488. int bx = ts_to_x( _rw->length - l );
  489. float *p = (float *)alloca( feel * sizeof( float ) );
  490. float prob = probability;
  491. for ( int i = 0; i < feel; i++ )
  492. {
  493. p[i] = prob;
  494. // reduce probability as we move away from center
  495. prob *= 0.5;
  496. }
  497. for ( int x = 0; x < bx; x++ )
  498. {
  499. float r = ((float)rand()) / RAND_MAX;
  500. if ( p[ x % feel ] + r >= 1 )
  501. put( x, y, l );
  502. }
  503. unlock();
  504. }
  505. /*************/
  506. /* Recording */
  507. /*************/
  508. void
  509. pattern::record ( int mode )
  510. {
  511. _recording = true;
  512. pattern::_pattern_recording = _number;
  513. }
  514. void
  515. pattern::record_stop ( void )
  516. {
  517. if ( ! _recording )
  518. return;
  519. _recording = false;
  520. if ( config.record_mode == NEW )
  521. trim();
  522. pattern::_recorded_events.clear();
  523. }
  524. /*******************************/
  525. /* Pattern specific accessors. */
  526. /*******************************/
  527. int
  528. pattern::port ( void ) const
  529. {
  530. return _port;
  531. }
  532. void
  533. pattern::port ( int p )
  534. {
  535. _port = p;
  536. }
  537. int
  538. pattern::channel ( void ) const
  539. {
  540. return _channel;
  541. }
  542. void
  543. pattern::channel ( int c )
  544. {
  545. _channel = c;
  546. }
  547. int
  548. pattern::note ( void ) const
  549. {
  550. return _note;
  551. }
  552. void
  553. pattern::note ( int n )
  554. {
  555. _note = n;
  556. }
  557. int
  558. pattern::ppqn ( void ) const
  559. {
  560. return _ppqn;
  561. }
  562. void
  563. pattern::ppqn ( int n )
  564. {
  565. _ppqn = n;
  566. }
  567. int
  568. pattern::key ( void ) const
  569. {
  570. return mapping.key();
  571. }
  572. void
  573. pattern::key ( int k )
  574. {
  575. mapping.key( k );
  576. }