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.

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