sequencer.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:34k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * sound/sequencer.c
  3.  *
  4.  * The sequencer personality manager.
  5.  */
  6. /*
  7.  * Copyright (C) by Hannu Savolainen 1993-1997
  8.  *
  9.  * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
  10.  * Version 2 (June 1991). See the "COPYING" file distributed with this software
  11.  * for more info.
  12.  */
  13. /*
  14.  * Thomas Sailer   : ioctl code reworked (vmalloc/vfree removed)
  15.  * Alan Cox    : reformatted and fixed a pair of null pointer bugs
  16.  */
  17. #include <linux/kmod.h>
  18. #define SEQUENCER_C
  19. #include "sound_config.h"
  20. #include "midi_ctrl.h"
  21. static int      sequencer_ok = 0;
  22. static struct sound_timer_operations *tmr;
  23. static int      tmr_no = -1; /* Currently selected timer */
  24. static int      pending_timer = -1; /* For timer change operation */
  25. extern unsigned long seq_time;
  26. static int      obsolete_api_used = 0;
  27. /*
  28.  * Local counts for number of synth and MIDI devices. These are initialized
  29.  * by the sequencer_open.
  30.  */
  31. static int      max_mididev = 0;
  32. static int      max_synthdev = 0;
  33. /*
  34.  * The seq_mode gives the operating mode of the sequencer:
  35.  *      1 = level1 (the default)
  36.  *      2 = level2 (extended capabilities)
  37.  */
  38. #define SEQ_1 1
  39. #define SEQ_2 2
  40. static int      seq_mode = SEQ_1;
  41. static DECLARE_WAIT_QUEUE_HEAD(seq_sleeper);
  42. static DECLARE_WAIT_QUEUE_HEAD(midi_sleeper);
  43. static int      midi_opened[MAX_MIDI_DEV] = {
  44. 0
  45. };
  46. static int      midi_written[MAX_MIDI_DEV] = {
  47. 0
  48. };
  49. static unsigned long prev_input_time = 0;
  50. static int      prev_event_time;
  51. #include "tuning.h"
  52. #define EV_SZ 8
  53. #define IEV_SZ 8
  54. static unsigned char *queue = NULL;
  55. static unsigned char *iqueue = NULL;
  56. static volatile int qhead = 0, qtail = 0, qlen = 0;
  57. static volatile int iqhead = 0, iqtail = 0, iqlen = 0;
  58. static volatile int seq_playing = 0;
  59. static volatile int sequencer_busy = 0;
  60. static int      output_threshold;
  61. static long     pre_event_timeout;
  62. static unsigned synth_open_mask;
  63. static int      seq_queue(unsigned char *note, char nonblock);
  64. static void     seq_startplay(void);
  65. static int      seq_sync(void);
  66. static void     seq_reset(void);
  67. #if MAX_SYNTH_DEV > 15
  68. #error Too many synthesizer devices enabled.
  69. #endif
  70. int sequencer_read(int dev, struct file *file, char *buf, int count)
  71. {
  72. int c = count, p = 0;
  73. int ev_len;
  74. unsigned long flags;
  75. dev = dev >> 4;
  76. ev_len = seq_mode == SEQ_1 ? 4 : 8;
  77. save_flags(flags);
  78. cli();
  79. if (!iqlen)
  80. {
  81.   if (file->f_flags & O_NONBLOCK) {
  82.    restore_flags(flags);
  83.    return -EAGAIN;
  84.    }
  85.   interruptible_sleep_on_timeout(&midi_sleeper,
  86.        pre_event_timeout);
  87. if (!iqlen)
  88. {
  89. restore_flags(flags);
  90. return 0;
  91. }
  92. }
  93. while (iqlen && c >= ev_len)
  94. {
  95. char *fixit = (char *) &iqueue[iqhead * IEV_SZ];
  96. copy_to_user(&(buf)[p], fixit, ev_len);
  97. p += ev_len;
  98. c -= ev_len;
  99. iqhead = (iqhead + 1) % SEQ_MAX_QUEUE;
  100. iqlen--;
  101. }
  102. restore_flags(flags);
  103. return count - c;
  104. }
  105. static void sequencer_midi_output(int dev)
  106. {
  107. /*
  108.  * Currently NOP
  109.  */
  110. }
  111. void seq_copy_to_input(unsigned char *event_rec, int len)
  112. {
  113. unsigned long flags;
  114. /*
  115.  * Verify that the len is valid for the current mode.
  116.  */
  117. if (len != 4 && len != 8)
  118. return;
  119. if ((seq_mode == SEQ_1) != (len == 4))
  120. return;
  121. if (iqlen >= (SEQ_MAX_QUEUE - 1))
  122. return; /* Overflow */
  123. save_flags(flags);
  124. cli();
  125. memcpy(&iqueue[iqtail * IEV_SZ], event_rec, len);
  126. iqlen++;
  127. iqtail = (iqtail + 1) % SEQ_MAX_QUEUE;
  128. wake_up(&midi_sleeper);
  129. restore_flags(flags);
  130. }
  131. static void sequencer_midi_input(int dev, unsigned char data)
  132. {
  133. unsigned int tstamp;
  134. unsigned char event_rec[4];
  135. if (data == 0xfe) /* Ignore active sensing */
  136. return;
  137. tstamp = jiffies - seq_time;
  138. if (tstamp != prev_input_time)
  139. {
  140. tstamp = (tstamp << 8) | SEQ_WAIT;
  141. seq_copy_to_input((unsigned char *) &tstamp, 4);
  142. prev_input_time = tstamp;
  143. }
  144. event_rec[0] = SEQ_MIDIPUTC;
  145. event_rec[1] = data;
  146. event_rec[2] = dev;
  147. event_rec[3] = 0;
  148. seq_copy_to_input(event_rec, 4);
  149. }
  150. void seq_input_event(unsigned char *event_rec, int len)
  151. {
  152. unsigned long this_time;
  153. if (seq_mode == SEQ_2)
  154. this_time = tmr->get_time(tmr_no);
  155. else
  156. this_time = jiffies - seq_time;
  157. if (this_time != prev_input_time)
  158. {
  159. unsigned char   tmp_event[8];
  160. tmp_event[0] = EV_TIMING;
  161. tmp_event[1] = TMR_WAIT_ABS;
  162. tmp_event[2] = 0;
  163. tmp_event[3] = 0;
  164. *(unsigned int *) &tmp_event[4] = this_time;
  165. seq_copy_to_input(tmp_event, 8);
  166. prev_input_time = this_time;
  167. }
  168. seq_copy_to_input(event_rec, len);
  169. }
  170. int sequencer_write(int dev, struct file *file, const char *buf, int count)
  171. {
  172. unsigned char event_rec[EV_SZ], ev_code;
  173. int p = 0, c, ev_size;
  174. int err;
  175. int mode = translate_mode(file);
  176. dev = dev >> 4;
  177. DEB(printk("sequencer_write(dev=%d, count=%d)n", dev, count));
  178. if (mode == OPEN_READ)
  179. return -EIO;
  180. c = count;
  181. while (c >= 4)
  182. {
  183. copy_from_user((char *) event_rec, &(buf)[p], 4);
  184. ev_code = event_rec[0];
  185. if (ev_code == SEQ_FULLSIZE)
  186. {
  187. int err, fmt;
  188. dev = *(unsigned short *) &event_rec[2];
  189. if (dev < 0 || dev >= max_synthdev || synth_devs[dev] == NULL)
  190. return -ENXIO;
  191. if (!(synth_open_mask & (1 << dev)))
  192. return -ENXIO;
  193. fmt = (*(short *) &event_rec[0]) & 0xffff;
  194. err = synth_devs[dev]->load_patch(dev, fmt, buf, p + 4, c, 0);
  195. if (err < 0)
  196. return err;
  197. return err;
  198. }
  199. if (ev_code >= 128)
  200. {
  201. if (seq_mode == SEQ_2 && ev_code == SEQ_EXTENDED)
  202. {
  203. printk(KERN_WARNING "Sequencer: Invalid level 2 event %xn", ev_code);
  204. return -EINVAL;
  205. }
  206. ev_size = 8;
  207. if (c < ev_size)
  208. {
  209. if (!seq_playing)
  210. seq_startplay();
  211. return count - c;
  212. }
  213. copy_from_user((char *) &event_rec[4], &(buf)[p + 4], 4);
  214. }
  215. else
  216. {
  217. if (seq_mode == SEQ_2)
  218. {
  219. printk(KERN_WARNING "Sequencer: 4 byte event in level 2 moden");
  220. return -EINVAL;
  221. }
  222. ev_size = 4;
  223. if (event_rec[0] != SEQ_MIDIPUTC)
  224. obsolete_api_used = 1;
  225. }
  226. if (event_rec[0] == SEQ_MIDIPUTC)
  227. {
  228. if (!midi_opened[event_rec[2]])
  229. {
  230. int mode;
  231. int dev = event_rec[2];
  232. if (dev >= max_mididev || midi_devs[dev]==NULL)
  233. {
  234. /*printk("Sequencer Error: Nonexistent MIDI device %dn", dev);*/
  235. return -ENXIO;
  236. }
  237. mode = translate_mode(file);
  238. if ((err = midi_devs[dev]->open(dev, mode,
  239. sequencer_midi_input, sequencer_midi_output)) < 0)
  240. {
  241. seq_reset();
  242. printk(KERN_WARNING "Sequencer Error: Unable to open Midi #%dn", dev);
  243. return err;
  244. }
  245. midi_opened[dev] = 1;
  246. }
  247. }
  248. if (!seq_queue(event_rec, (file->f_flags & (O_NONBLOCK) ? 1 : 0)))
  249. {
  250. int processed = count - c;
  251. if (!seq_playing)
  252. seq_startplay();
  253. if (!processed && (file->f_flags & O_NONBLOCK))
  254. return -EAGAIN;
  255. else
  256. return processed;
  257. }
  258. p += ev_size;
  259. c -= ev_size;
  260. }
  261. if (!seq_playing)
  262. seq_startplay();
  263. return count;
  264. }
  265. static int seq_queue(unsigned char *note, char nonblock)
  266. {
  267. /*
  268.  * Test if there is space in the queue
  269.  */
  270. if (qlen >= SEQ_MAX_QUEUE)
  271. if (!seq_playing)
  272. seq_startplay(); /*
  273.  * Give chance to drain the queue
  274.  */
  275. if (!nonblock && qlen >= SEQ_MAX_QUEUE && !waitqueue_active(&seq_sleeper)) {
  276. /*
  277.  * Sleep until there is enough space on the queue
  278.  */
  279. interruptible_sleep_on(&seq_sleeper);
  280. }
  281. if (qlen >= SEQ_MAX_QUEUE)
  282. {
  283. return 0; /*
  284.  * To be sure
  285.  */
  286. }
  287. memcpy(&queue[qtail * EV_SZ], note, EV_SZ);
  288. qtail = (qtail + 1) % SEQ_MAX_QUEUE;
  289. qlen++;
  290. return 1;
  291. }
  292. static int extended_event(unsigned char *q)
  293. {
  294. int dev = q[2];
  295. if (dev < 0 || dev >= max_synthdev)
  296. return -ENXIO;
  297. if (!(synth_open_mask & (1 << dev)))
  298. return -ENXIO;
  299. switch (q[1])
  300. {
  301. case SEQ_NOTEOFF:
  302. synth_devs[dev]->kill_note(dev, q[3], q[4], q[5]);
  303. break;
  304. case SEQ_NOTEON:
  305. if (q[4] > 127 && q[4] != 255)
  306. return 0;
  307. if (q[5] == 0)
  308. {
  309. synth_devs[dev]->kill_note(dev, q[3], q[4], q[5]);
  310. break;
  311. }
  312. synth_devs[dev]->start_note(dev, q[3], q[4], q[5]);
  313. break;
  314. case SEQ_PGMCHANGE:
  315. synth_devs[dev]->set_instr(dev, q[3], q[4]);
  316. break;
  317. case SEQ_AFTERTOUCH:
  318. synth_devs[dev]->aftertouch(dev, q[3], q[4]);
  319. break;
  320. case SEQ_BALANCE:
  321. synth_devs[dev]->panning(dev, q[3], (char) q[4]);
  322. break;
  323. case SEQ_CONTROLLER:
  324. synth_devs[dev]->controller(dev, q[3], q[4], (short) (q[5] | (q[6] << 8)));
  325. break;
  326. case SEQ_VOLMODE:
  327. if (synth_devs[dev]->volume_method != NULL)
  328. synth_devs[dev]->volume_method(dev, q[3]);
  329. break;
  330. default:
  331. return -EINVAL;
  332. }
  333. return 0;
  334. }
  335. static int find_voice(int dev, int chn, int note)
  336. {
  337. unsigned short key;
  338. int i;
  339. key = (chn << 8) | (note + 1);
  340. for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
  341. if (synth_devs[dev]->alloc.map[i] == key)
  342. return i;
  343. return -1;
  344. }
  345. static int alloc_voice(int dev, int chn, int note)
  346. {
  347. unsigned short  key;
  348. int voice;
  349. key = (chn << 8) | (note + 1);
  350. voice = synth_devs[dev]->alloc_voice(dev, chn, note,
  351.      &synth_devs[dev]->alloc);
  352. synth_devs[dev]->alloc.map[voice] = key;
  353. synth_devs[dev]->alloc.alloc_times[voice] =
  354. synth_devs[dev]->alloc.timestamp++;
  355. return voice;
  356. }
  357. static void seq_chn_voice_event(unsigned char *event_rec)
  358. {
  359. #define dev event_rec[1]
  360. #define cmd event_rec[2]
  361. #define chn event_rec[3]
  362. #define note event_rec[4]
  363. #define parm event_rec[5]
  364. int voice = -1;
  365. if ((int) dev > max_synthdev || synth_devs[dev] == NULL)
  366. return;
  367. if (!(synth_open_mask & (1 << dev)))
  368. return;
  369. if (!synth_devs[dev])
  370. return;
  371. if (seq_mode == SEQ_2)
  372. {
  373. if (synth_devs[dev]->alloc_voice)
  374. voice = find_voice(dev, chn, note);
  375. if (cmd == MIDI_NOTEON && parm == 0)
  376. {
  377. cmd = MIDI_NOTEOFF;
  378. parm = 64;
  379. }
  380. }
  381. switch (cmd)
  382. {
  383. case MIDI_NOTEON:
  384. if (note > 127 && note != 255) /* Not a seq2 feature */
  385. return;
  386. if (voice == -1 && seq_mode == SEQ_2 && synth_devs[dev]->alloc_voice)
  387. {
  388. /* Internal synthesizer (FM, GUS, etc) */
  389. voice = alloc_voice(dev, chn, note);
  390. }
  391. if (voice == -1)
  392. voice = chn;
  393. if (seq_mode == SEQ_2 && (int) dev < num_synths)
  394. {
  395. /*
  396.  * The MIDI channel 10 is a percussive channel. Use the note
  397.  * number to select the proper patch (128 to 255) to play.
  398.  */
  399. if (chn == 9)
  400. {
  401. synth_devs[dev]->set_instr(dev, voice, 128 + note);
  402. synth_devs[dev]->chn_info[chn].pgm_num = 128 + note;
  403. }
  404. synth_devs[dev]->setup_voice(dev, voice, chn);
  405. }
  406. synth_devs[dev]->start_note(dev, voice, note, parm);
  407. break;
  408. case MIDI_NOTEOFF:
  409. if (voice == -1)
  410. voice = chn;
  411. synth_devs[dev]->kill_note(dev, voice, note, parm);
  412. break;
  413. case MIDI_KEY_PRESSURE:
  414. if (voice == -1)
  415. voice = chn;
  416. synth_devs[dev]->aftertouch(dev, voice, parm);
  417. break;
  418. default:;
  419. }
  420. #undef dev
  421. #undef cmd
  422. #undef chn
  423. #undef note
  424. #undef parm
  425. }
  426. static void seq_chn_common_event(unsigned char *event_rec)
  427. {
  428. unsigned char dev = event_rec[1];
  429. unsigned char cmd = event_rec[2];
  430. unsigned char chn = event_rec[3];
  431. unsigned char p1 = event_rec[4];
  432. /* unsigned char p2 = event_rec[5]; */
  433. unsigned short w14 = *(short *) &event_rec[6];
  434. if ((int) dev > max_synthdev || synth_devs[dev] == NULL)
  435. return;
  436. if (!(synth_open_mask & (1 << dev)))
  437. return;
  438. if (!synth_devs[dev])
  439. return;
  440. switch (cmd)
  441. {
  442. case MIDI_PGM_CHANGE:
  443. if (seq_mode == SEQ_2)
  444. {
  445. synth_devs[dev]->chn_info[chn].pgm_num = p1;
  446. if ((int) dev >= num_synths)
  447. synth_devs[dev]->set_instr(dev, chn, p1);
  448. }
  449. else
  450. synth_devs[dev]->set_instr(dev, chn, p1);
  451. break;
  452. case MIDI_CTL_CHANGE:
  453. if (seq_mode == SEQ_2)
  454. {
  455. if (chn > 15 || p1 > 127)
  456. break;
  457. synth_devs[dev]->chn_info[chn].controllers[p1] = w14 & 0x7f;
  458. if (p1 < 32) /* Setting MSB should clear LSB to 0 */
  459. synth_devs[dev]->chn_info[chn].controllers[p1 + 32] = 0;
  460. if ((int) dev < num_synths)
  461. {
  462. int val = w14 & 0x7f;
  463. int i, key;
  464. if (p1 < 64) /* Combine MSB and LSB */
  465. {
  466. val = ((synth_devs[dev]->
  467. chn_info[chn].controllers[p1 & ~32] & 0x7f) << 7)
  468. | (synth_devs[dev]->
  469. chn_info[chn].controllers[p1 | 32] & 0x7f);
  470. p1 &= ~32;
  471. }
  472. /* Handle all playing notes on this channel */
  473. key = ((int) chn << 8);
  474. for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
  475. if ((synth_devs[dev]->alloc.map[i] & 0xff00) == key)
  476. synth_devs[dev]->controller(dev, i, p1, val);
  477. }
  478. else
  479. synth_devs[dev]->controller(dev, chn, p1, w14);
  480. }
  481. else /* Mode 1 */
  482. synth_devs[dev]->controller(dev, chn, p1, w14);
  483. break;
  484. case MIDI_PITCH_BEND:
  485. if (seq_mode == SEQ_2)
  486. {
  487. synth_devs[dev]->chn_info[chn].bender_value = w14;
  488. if ((int) dev < num_synths)
  489. {
  490. /* Handle all playing notes on this channel */
  491. int i, key;
  492. key = (chn << 8);
  493. for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
  494. if ((synth_devs[dev]->alloc.map[i] & 0xff00) == key)
  495. synth_devs[dev]->bender(dev, i, w14);
  496. }
  497. else
  498. synth_devs[dev]->bender(dev, chn, w14);
  499. }
  500. else /* MODE 1 */
  501. synth_devs[dev]->bender(dev, chn, w14);
  502. break;
  503. default:;
  504. }
  505. }
  506. static int seq_timing_event(unsigned char *event_rec)
  507. {
  508. unsigned char cmd = event_rec[1];
  509. unsigned int parm = *(int *) &event_rec[4];
  510. if (seq_mode == SEQ_2)
  511. {
  512. int ret;
  513. if ((ret = tmr->event(tmr_no, event_rec)) == TIMER_ARMED)
  514. if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
  515. wake_up(&seq_sleeper);
  516. return ret;
  517. }
  518. switch (cmd)
  519. {
  520. case TMR_WAIT_REL:
  521. parm += prev_event_time;
  522. /*
  523.  * NOTE!  No break here. Execution of TMR_WAIT_REL continues in the
  524.  * next case (TMR_WAIT_ABS)
  525.  */
  526. case TMR_WAIT_ABS:
  527. if (parm > 0)
  528. {
  529. long time;
  530. time = parm;
  531. prev_event_time = time;
  532. seq_playing = 1;
  533. request_sound_timer(time);
  534. if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
  535. wake_up(&seq_sleeper);
  536. return TIMER_ARMED;
  537. }
  538. break;
  539. case TMR_START:
  540. seq_time = jiffies;
  541. prev_input_time = 0;
  542. prev_event_time = 0;
  543. break;
  544. case TMR_STOP:
  545. break;
  546. case TMR_CONTINUE:
  547. break;
  548. case TMR_TEMPO:
  549. break;
  550. case TMR_ECHO:
  551. if (seq_mode == SEQ_2)
  552. seq_copy_to_input(event_rec, 8);
  553. else
  554. {
  555. parm = (parm << 8 | SEQ_ECHO);
  556. seq_copy_to_input((unsigned char *) &parm, 4);
  557. }
  558. break;
  559. default:;
  560. }
  561. return TIMER_NOT_ARMED;
  562. }
  563. static void seq_local_event(unsigned char *event_rec)
  564. {
  565. unsigned char   cmd = event_rec[1];
  566. unsigned int    parm = *((unsigned int *) &event_rec[4]);
  567. switch (cmd)
  568. {
  569. case LOCL_STARTAUDIO:
  570. DMAbuf_start_devices(parm);
  571. break;
  572. default:;
  573. }
  574. }
  575. static void seq_sysex_message(unsigned char *event_rec)
  576. {
  577. int dev = event_rec[1];
  578. int i, l = 0;
  579. unsigned char  *buf = &event_rec[2];
  580. if ((int) dev > max_synthdev)
  581. return;
  582. if (!(synth_open_mask & (1 << dev)))
  583. return;
  584. if (!synth_devs[dev])
  585. return;
  586. l = 0;
  587. for (i = 0; i < 6 && buf[i] != 0xff; i++)
  588. l = i + 1;
  589. if (!synth_devs[dev]->send_sysex)
  590. return;
  591. if (l > 0)
  592. synth_devs[dev]->send_sysex(dev, buf, l);
  593. }
  594. static int play_event(unsigned char *q)
  595. {
  596. /*
  597.  * NOTE! This routine returns
  598.  *   0 = normal event played.
  599.  *   1 = Timer armed. Suspend playback until timer callback.
  600.  *   2 = MIDI output buffer full. Restore queue and suspend until timer
  601.  */
  602. unsigned int *delay;
  603. switch (q[0])
  604. {
  605. case SEQ_NOTEOFF:
  606. if (synth_open_mask & (1 << 0))
  607. if (synth_devs[0])
  608. synth_devs[0]->kill_note(0, q[1], 255, q[3]);
  609. break;
  610. case SEQ_NOTEON:
  611. if (q[4] < 128 || q[4] == 255)
  612. if (synth_open_mask & (1 << 0))
  613. if (synth_devs[0])
  614. synth_devs[0]->start_note(0, q[1], q[2], q[3]);
  615. break;
  616. case SEQ_WAIT:
  617. delay = (unsigned int *) q; /*
  618.  * Bytes 1 to 3 are containing the *
  619.  * delay in 'ticks'
  620.  */
  621. *delay = (*delay >> 8) & 0xffffff;
  622. if (*delay > 0)
  623. {
  624. long time;
  625. seq_playing = 1;
  626. time = *delay;
  627. prev_event_time = time;
  628. request_sound_timer(time);
  629. if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
  630. wake_up(&seq_sleeper);
  631. /*
  632.  * The timer is now active and will reinvoke this function
  633.  * after the timer expires. Return to the caller now.
  634.  */
  635. return 1;
  636. }
  637. break;
  638. case SEQ_PGMCHANGE:
  639. if (synth_open_mask & (1 << 0))
  640. if (synth_devs[0])
  641. synth_devs[0]->set_instr(0, q[1], q[2]);
  642. break;
  643. case SEQ_SYNCTIMER:  /*
  644.  * Reset timer
  645.  */
  646. seq_time = jiffies;
  647. prev_input_time = 0;
  648. prev_event_time = 0;
  649. break;
  650. case SEQ_MIDIPUTC: /*
  651.  * Put a midi character
  652.  */
  653. if (midi_opened[q[2]])
  654. {
  655. int dev;
  656. dev = q[2];
  657. if (dev < 0 || dev >= num_midis || midi_devs[dev] == NULL)
  658. break;
  659. if (!midi_devs[dev]->outputc(dev, q[1]))
  660. {
  661. /*
  662.  * Output FIFO is full. Wait one timer cycle and try again.
  663.  */
  664. seq_playing = 1;
  665. request_sound_timer(-1);
  666. return 2;
  667. }
  668. else
  669. midi_written[dev] = 1;
  670. }
  671. break;
  672. case SEQ_ECHO:
  673. seq_copy_to_input(q, 4); /*
  674.  * Echo back to the process
  675.  */
  676. break;
  677. case SEQ_PRIVATE:
  678. if ((int) q[1] < max_synthdev)
  679. synth_devs[q[1]]->hw_control(q[1], q);
  680. break;
  681. case SEQ_EXTENDED:
  682. extended_event(q);
  683. break;
  684. case EV_CHN_VOICE:
  685. seq_chn_voice_event(q);
  686. break;
  687. case EV_CHN_COMMON:
  688. seq_chn_common_event(q);
  689. break;
  690. case EV_TIMING:
  691. if (seq_timing_event(q) == TIMER_ARMED)
  692. {
  693. return 1;
  694. }
  695. break;
  696. case EV_SEQ_LOCAL:
  697. seq_local_event(q);
  698. break;
  699. case EV_SYSEX:
  700. seq_sysex_message(q);
  701. break;
  702. default:;
  703. }
  704. return 0;
  705. }
  706. static void seq_startplay(void)
  707. {
  708. unsigned long flags;
  709. int this_one, action;
  710. while (qlen > 0)
  711. {
  712. save_flags(flags);
  713. cli();
  714. qhead = ((this_one = qhead) + 1) % SEQ_MAX_QUEUE;
  715. qlen--;
  716. restore_flags(flags);
  717. seq_playing = 1;
  718. if ((action = play_event(&queue[this_one * EV_SZ])))
  719. { /* Suspend playback. Next timer routine invokes this routine again */
  720. if (action == 2)
  721. {
  722. qlen++;
  723. qhead = this_one;
  724. }
  725. return;
  726. }
  727. }
  728. seq_playing = 0;
  729. if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
  730. wake_up(&seq_sleeper);
  731. }
  732. static void reset_controllers(int dev, unsigned char *controller, int update_dev)
  733. {
  734. int i;
  735. for (i = 0; i < 128; i++)
  736. controller[i] = ctrl_def_values[i];
  737. }
  738. static void setup_mode2(void)
  739. {
  740. int dev;
  741. max_synthdev = num_synths;
  742. for (dev = 0; dev < num_midis; dev++)
  743. {
  744. if (midi_devs[dev] && midi_devs[dev]->converter != NULL)
  745. {
  746. synth_devs[max_synthdev++] = midi_devs[dev]->converter;
  747. }
  748. }
  749. for (dev = 0; dev < max_synthdev; dev++)
  750. {
  751. int chn;
  752. synth_devs[dev]->sysex_ptr = 0;
  753. synth_devs[dev]->emulation = 0;
  754. for (chn = 0; chn < 16; chn++)
  755. {
  756. synth_devs[dev]->chn_info[chn].pgm_num = 0;
  757. reset_controllers(dev,
  758. synth_devs[dev]->chn_info[chn].controllers,0);
  759. synth_devs[dev]->chn_info[chn].bender_value = (1 << 7); /* Neutral */
  760. synth_devs[dev]->chn_info[chn].bender_range = 200;
  761. }
  762. }
  763. max_mididev = 0;
  764. seq_mode = SEQ_2;
  765. }
  766. int sequencer_open(int dev, struct file *file)
  767. {
  768. int retval, mode, i;
  769. int level, tmp;
  770. unsigned long flags;
  771. if (!sequencer_ok)
  772. sequencer_init();
  773. level = ((dev & 0x0f) == SND_DEV_SEQ2) ? 2 : 1;
  774. dev = dev >> 4;
  775. mode = translate_mode(file);
  776. DEB(printk("sequencer_open(dev=%d)n", dev));
  777. if (!sequencer_ok)
  778. {
  779. /* printk("Sound card: sequencer not initializedn");*/
  780. return -ENXIO;
  781. }
  782. if (dev) /* Patch manager device (obsolete) */
  783. return -ENXIO;
  784. if(synth_devs[dev] == NULL)
  785. request_module("synth0");
  786. if (mode == OPEN_READ)
  787. {
  788. if (!num_midis)
  789. {
  790. /*printk("Sequencer: No MIDI devices. Input not possiblen");*/
  791. sequencer_busy = 0;
  792. return -ENXIO;
  793. }
  794. }
  795. save_flags(flags);
  796. cli();
  797. if (sequencer_busy)
  798. {
  799. restore_flags(flags);
  800. return -EBUSY;
  801. }
  802. sequencer_busy = 1;
  803. obsolete_api_used = 0;
  804. restore_flags(flags);
  805. max_mididev = num_midis;
  806. max_synthdev = num_synths;
  807. pre_event_timeout = MAX_SCHEDULE_TIMEOUT;
  808. seq_mode = SEQ_1;
  809. if (pending_timer != -1)
  810. {
  811. tmr_no = pending_timer;
  812. pending_timer = -1;
  813. }
  814. if (tmr_no == -1) /* Not selected yet */
  815. {
  816. int i, best;
  817. best = -1;
  818. for (i = 0; i < num_sound_timers; i++)
  819. if (sound_timer_devs[i] && sound_timer_devs[i]->priority > best)
  820. {
  821. tmr_no = i;
  822. best = sound_timer_devs[i]->priority;
  823. }
  824. if (tmr_no == -1) /* Should not be */
  825. tmr_no = 0;
  826. }
  827. tmr = sound_timer_devs[tmr_no];
  828. if (level == 2)
  829. {
  830. if (tmr == NULL)
  831. {
  832. /*printk("sequencer: No timer for level 2n");*/
  833. sequencer_busy = 0;
  834. return -ENXIO;
  835. }
  836. setup_mode2();
  837. }
  838. if (!max_synthdev && !max_mididev)
  839. {
  840. sequencer_busy=0;
  841. return -ENXIO;
  842. }
  843. synth_open_mask = 0;
  844. for (i = 0; i < max_mididev; i++)
  845. {
  846. midi_opened[i] = 0;
  847. midi_written[i] = 0;
  848. }
  849. for (i = 0; i < max_synthdev; i++)
  850. {
  851. if (synth_devs[i]==NULL)
  852. continue;
  853. if (synth_devs[i]->owner)
  854. __MOD_INC_USE_COUNT (synth_devs[i]->owner);
  855. if ((tmp = synth_devs[i]->open(i, mode)) < 0)
  856. {
  857. printk(KERN_WARNING "Sequencer: Warning! Cannot open synth device #%d (%d)n", i, tmp);
  858. if (synth_devs[i]->midi_dev)
  859. printk(KERN_WARNING "(Maps to MIDI dev #%d)n", synth_devs[i]->midi_dev);
  860. }
  861. else
  862. {
  863. synth_open_mask |= (1 << i);
  864. if (synth_devs[i]->midi_dev)
  865. midi_opened[synth_devs[i]->midi_dev] = 1;
  866. }
  867. }
  868. seq_time = jiffies;
  869. prev_input_time = 0;
  870. prev_event_time = 0;
  871. if (seq_mode == SEQ_1 && (mode == OPEN_READ || mode == OPEN_READWRITE))
  872. {
  873. /*
  874.  * Initialize midi input devices
  875.  */
  876. for (i = 0; i < max_mididev; i++)
  877. if (!midi_opened[i] && midi_devs[i])
  878. {
  879. if (midi_devs[i]->owner)
  880. __MOD_INC_USE_COUNT (midi_devs[i]->owner);
  881. if ((retval = midi_devs[i]->open(i, mode,
  882. sequencer_midi_input, sequencer_midi_output)) >= 0)
  883. {
  884. midi_opened[i] = 1;
  885. }
  886. }
  887. }
  888. if (seq_mode == SEQ_2) {
  889. if (tmr->owner)
  890. __MOD_INC_USE_COUNT (tmr->owner);
  891. tmr->open(tmr_no, seq_mode);
  892. }
  893.   init_waitqueue_head(&seq_sleeper);
  894.   init_waitqueue_head(&midi_sleeper);
  895. output_threshold = SEQ_MAX_QUEUE / 2;
  896. return 0;
  897. }
  898. void seq_drain_midi_queues(void)
  899. {
  900. int i, n;
  901. /*
  902.  * Give the Midi drivers time to drain their output queues
  903.  */
  904. n = 1;
  905. while (!signal_pending(current) && n)
  906. {
  907. n = 0;
  908. for (i = 0; i < max_mididev; i++)
  909. if (midi_opened[i] && midi_written[i])
  910. if (midi_devs[i]->buffer_status != NULL)
  911. if (midi_devs[i]->buffer_status(i))
  912. n++;
  913. /*
  914.  * Let's have a delay
  915.  */
  916.   if (n)
  917.   interruptible_sleep_on_timeout(&seq_sleeper,
  918.        HZ/10);
  919. }
  920. }
  921. void sequencer_release(int dev, struct file *file)
  922. {
  923. int i;
  924. int mode = translate_mode(file);
  925. dev = dev >> 4;
  926. DEB(printk("sequencer_release(dev=%d)n", dev));
  927. /*
  928.  * Wait until the queue is empty (if we don't have nonblock)
  929.  */
  930. if (mode != OPEN_READ && !(file->f_flags & O_NONBLOCK))
  931. {
  932. while (!signal_pending(current) && qlen > 0)
  933. {
  934.    seq_sync();
  935.   interruptible_sleep_on_timeout(&seq_sleeper,
  936.        3*HZ);
  937.   /* Extra delay */
  938. }
  939. }
  940. if (mode != OPEN_READ)
  941. seq_drain_midi_queues(); /*
  942.  * Ensure the output queues are empty
  943.  */
  944. seq_reset();
  945. if (mode != OPEN_READ)
  946. seq_drain_midi_queues(); /*
  947.  * Flush the all notes off messages
  948.  */
  949. for (i = 0; i < max_synthdev; i++)
  950. {
  951. if (synth_open_mask & (1 << i)) /*
  952.  * Actually opened
  953.  */
  954. if (synth_devs[i])
  955. {
  956. synth_devs[i]->close(i);
  957. if (synth_devs[i]->owner)
  958. __MOD_DEC_USE_COUNT (synth_devs[i]->owner);
  959. if (synth_devs[i]->midi_dev)
  960. midi_opened[synth_devs[i]->midi_dev] = 0;
  961. }
  962. }
  963. for (i = 0; i < max_mididev; i++)
  964. {
  965. if (midi_opened[i]) {
  966. midi_devs[i]->close(i);
  967. if (midi_devs[i]->owner)
  968. __MOD_DEC_USE_COUNT (midi_devs[i]->owner);
  969. }
  970. }
  971. if (seq_mode == SEQ_2) {
  972. tmr->close(tmr_no);
  973. if (tmr->owner)
  974. __MOD_DEC_USE_COUNT (tmr->owner);
  975. }
  976. if (obsolete_api_used)
  977. printk(KERN_WARNING "/dev/music: Obsolete (4 byte) API was used by %sn", current->comm);
  978. sequencer_busy = 0;
  979. }
  980. static int seq_sync(void)
  981. {
  982. unsigned long flags;
  983. if (qlen && !seq_playing && !signal_pending(current))
  984. seq_startplay();
  985. save_flags(flags);
  986. cli();
  987.   if (qlen > 0)
  988.   interruptible_sleep_on_timeout(&seq_sleeper, HZ);
  989. restore_flags(flags);
  990. return qlen;
  991. }
  992. static void midi_outc(int dev, unsigned char data)
  993. {
  994. /*
  995.  * NOTE! Calls sleep(). Don't call this from interrupt.
  996.  */
  997. int n;
  998. unsigned long flags;
  999. /*
  1000.  * This routine sends one byte to the Midi channel.
  1001.  * If the output FIFO is full, it waits until there
  1002.  * is space in the queue
  1003.  */
  1004. n = 3 * HZ; /* Timeout */
  1005. save_flags(flags);
  1006. cli();
  1007.   while (n && !midi_devs[dev]->outputc(dev, data)) {
  1008.   interruptible_sleep_on_timeout(&seq_sleeper, HZ/25);
  1009.    n--;
  1010.    }
  1011. restore_flags(flags);
  1012. }
  1013. static void seq_reset(void)
  1014. {
  1015. /*
  1016.  * NOTE! Calls sleep(). Don't call this from interrupt.
  1017.  */
  1018. int i;
  1019. int chn;
  1020. unsigned long flags;
  1021. sound_stop_timer();
  1022. seq_time = jiffies;
  1023. prev_input_time = 0;
  1024. prev_event_time = 0;
  1025. qlen = qhead = qtail = 0;
  1026. iqlen = iqhead = iqtail = 0;
  1027. for (i = 0; i < max_synthdev; i++)
  1028. if (synth_open_mask & (1 << i))
  1029. if (synth_devs[i])
  1030. synth_devs[i]->reset(i);
  1031. if (seq_mode == SEQ_2)
  1032. {
  1033. for (chn = 0; chn < 16; chn++)
  1034. for (i = 0; i < max_synthdev; i++)
  1035. if (synth_open_mask & (1 << i))
  1036. if (synth_devs[i])
  1037. {
  1038. synth_devs[i]->controller(i, chn, 123, 0); /* All notes off */
  1039. synth_devs[i]->controller(i, chn, 121, 0); /* Reset all ctl */
  1040. synth_devs[i]->bender(i, chn, 1 << 13); /* Bender off */
  1041. }
  1042. }
  1043. else /* seq_mode == SEQ_1 */
  1044. {
  1045. for (i = 0; i < max_mididev; i++)
  1046. if (midi_written[i]) /*
  1047.  * Midi used. Some notes may still be playing
  1048.  */
  1049. {
  1050. /*
  1051.  *      Sending just a ACTIVE SENSING message should be enough to stop all
  1052.  *      playing notes. Since there are devices not recognizing the
  1053.  *      active sensing, we have to send some all notes off messages also.
  1054.  */
  1055. midi_outc(i, 0xfe);
  1056. for (chn = 0; chn < 16; chn++)
  1057. {
  1058. midi_outc(i, (unsigned char) (0xb0 + (chn & 0x0f))); /* control change */
  1059. midi_outc(i, 0x7b); /* All notes off */
  1060. midi_outc(i, 0); /* Dummy parameter */
  1061. }
  1062. midi_devs[i]->close(i);
  1063. midi_written[i] = 0;
  1064. midi_opened[i] = 0;
  1065. }
  1066. }
  1067. seq_playing = 0;
  1068. save_flags(flags);
  1069. cli();
  1070. if (waitqueue_active(&seq_sleeper)) {
  1071. /*      printk( "Sequencer Warning: Unexpected sleeping process - Waking upn"); */
  1072. wake_up(&seq_sleeper);
  1073. }
  1074. restore_flags(flags);
  1075. }
  1076. static void seq_panic(void)
  1077. {
  1078. /*
  1079.  * This routine is called by the application in case the user
  1080.  * wants to reset the system to the default state.
  1081.  */
  1082. seq_reset();
  1083. /*
  1084.  * Since some of the devices don't recognize the active sensing and
  1085.  * all notes off messages, we have to shut all notes manually.
  1086.  *
  1087.  *      TO BE IMPLEMENTED LATER
  1088.  */
  1089. /*
  1090.  * Also return the controllers to their default states
  1091.  */
  1092. }
  1093. int sequencer_ioctl(int dev, struct file *file, unsigned int cmd, caddr_t arg)
  1094. {
  1095. int midi_dev, orig_dev, val, err;
  1096. int mode = translate_mode(file);
  1097. struct synth_info inf;
  1098. struct seq_event_rec event_rec;
  1099. unsigned long flags;
  1100. orig_dev = dev = dev >> 4;
  1101. switch (cmd)
  1102. {
  1103. case SNDCTL_TMR_TIMEBASE:
  1104. case SNDCTL_TMR_TEMPO:
  1105. case SNDCTL_TMR_START:
  1106. case SNDCTL_TMR_STOP:
  1107. case SNDCTL_TMR_CONTINUE:
  1108. case SNDCTL_TMR_METRONOME:
  1109. case SNDCTL_TMR_SOURCE:
  1110. if (seq_mode != SEQ_2)
  1111. return -EINVAL;
  1112. return tmr->ioctl(tmr_no, cmd, arg);
  1113. case SNDCTL_TMR_SELECT:
  1114. if (seq_mode != SEQ_2)
  1115. return -EINVAL;
  1116. if (get_user(pending_timer, (int *)arg))
  1117. return -EFAULT;
  1118. if (pending_timer < 0 || pending_timer >= num_sound_timers || sound_timer_devs[pending_timer] == NULL)
  1119. {
  1120. pending_timer = -1;
  1121. return -EINVAL;
  1122. }
  1123. val = pending_timer;
  1124. break;
  1125. case SNDCTL_SEQ_PANIC:
  1126. seq_panic();
  1127. return -EINVAL;
  1128. case SNDCTL_SEQ_SYNC:
  1129. if (mode == OPEN_READ)
  1130. return 0;
  1131. while (qlen > 0 && !signal_pending(current))
  1132. seq_sync();
  1133. return qlen ? -EINTR : 0;
  1134. case SNDCTL_SEQ_RESET:
  1135. seq_reset();
  1136. return 0;
  1137. case SNDCTL_SEQ_TESTMIDI:
  1138. if (__get_user(midi_dev, (int *)arg))
  1139. return -EFAULT;
  1140. if (midi_dev < 0 || midi_dev >= max_mididev || !midi_devs[midi_dev])
  1141. return -ENXIO;
  1142. if (!midi_opened[midi_dev] &&
  1143. (err = midi_devs[midi_dev]->open(midi_dev, mode, sequencer_midi_input,
  1144.      sequencer_midi_output)) < 0)
  1145. return err;
  1146. midi_opened[midi_dev] = 1;
  1147. return 0;
  1148. case SNDCTL_SEQ_GETINCOUNT:
  1149. if (mode == OPEN_WRITE)
  1150. return 0;
  1151. val = iqlen;
  1152. break;
  1153. case SNDCTL_SEQ_GETOUTCOUNT:
  1154. if (mode == OPEN_READ)
  1155. return 0;
  1156. val = SEQ_MAX_QUEUE - qlen;
  1157. break;
  1158. case SNDCTL_SEQ_GETTIME:
  1159. if (seq_mode == SEQ_2)
  1160. return tmr->ioctl(tmr_no, cmd, arg);
  1161. val = jiffies - seq_time;
  1162. break;
  1163. case SNDCTL_SEQ_CTRLRATE:
  1164. /*
  1165.  * If *arg == 0, just return the current rate
  1166.  */
  1167. if (seq_mode == SEQ_2)
  1168. return tmr->ioctl(tmr_no, cmd, arg);
  1169. if (get_user(val, (int *)arg))
  1170. return -EFAULT;
  1171. if (val != 0)
  1172. return -EINVAL;
  1173. val = HZ;
  1174. break;
  1175. case SNDCTL_SEQ_RESETSAMPLES:
  1176. case SNDCTL_SYNTH_REMOVESAMPLE:
  1177. case SNDCTL_SYNTH_CONTROL:
  1178. if (get_user(dev, (int *)arg))
  1179. return -EFAULT;
  1180. if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
  1181. return -ENXIO;
  1182. if (!(synth_open_mask & (1 << dev)) && !orig_dev)
  1183. return -EBUSY;
  1184. return synth_devs[dev]->ioctl(dev, cmd, arg);
  1185. case SNDCTL_SEQ_NRSYNTHS:
  1186. val = max_synthdev;
  1187. break;
  1188. case SNDCTL_SEQ_NRMIDIS:
  1189. val = max_mididev;
  1190. break;
  1191. case SNDCTL_SYNTH_MEMAVL:
  1192. if (get_user(dev, (int *)arg))
  1193. return -EFAULT;
  1194. if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
  1195. return -ENXIO;
  1196. if (!(synth_open_mask & (1 << dev)) && !orig_dev)
  1197. return -EBUSY;
  1198. val = synth_devs[dev]->ioctl(dev, cmd, arg);
  1199. break;
  1200. case SNDCTL_FM_4OP_ENABLE:
  1201. if (get_user(dev, (int *)arg))
  1202. return -EFAULT;
  1203. if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
  1204. return -ENXIO;
  1205. if (!(synth_open_mask & (1 << dev)))
  1206. return -ENXIO;
  1207. synth_devs[dev]->ioctl(dev, cmd, arg);
  1208. return 0;
  1209. case SNDCTL_SYNTH_INFO:
  1210. if (get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
  1211. return -EFAULT;
  1212. if (dev < 0 || dev >= max_synthdev)
  1213. return -ENXIO;
  1214. if (!(synth_open_mask & (1 << dev)) && !orig_dev)
  1215. return -EBUSY;
  1216. return synth_devs[dev]->ioctl(dev, cmd, arg);
  1217. /* Like SYNTH_INFO but returns ID in the name field */
  1218. case SNDCTL_SYNTH_ID:
  1219. if (get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
  1220. return -EFAULT;
  1221. if (dev < 0 || dev >= max_synthdev)
  1222. return -ENXIO;
  1223. if (!(synth_open_mask & (1 << dev)) && !orig_dev)
  1224. return -EBUSY;
  1225. memcpy(&inf, synth_devs[dev]->info, sizeof(inf));
  1226. strncpy(inf.name, synth_devs[dev]->id, sizeof(inf.name));
  1227. inf.device = dev;
  1228. return copy_to_user(arg, &inf, sizeof(inf))?-EFAULT:0;
  1229. case SNDCTL_SEQ_OUTOFBAND:
  1230. if (copy_from_user(&event_rec, arg, sizeof(event_rec)))
  1231. return -EFAULT;
  1232. save_flags(flags);
  1233. cli();
  1234. play_event(event_rec.arr);
  1235. restore_flags(flags);
  1236. return 0;
  1237. case SNDCTL_MIDI_INFO:
  1238. if (get_user(dev, (int *)(&(((struct midi_info *)arg)->device))))
  1239. return -EFAULT;
  1240. if (dev < 0 || dev >= max_mididev || !midi_devs[dev])
  1241. return -ENXIO;
  1242. midi_devs[dev]->info.device = dev;
  1243. return copy_to_user(arg, &midi_devs[dev]->info, sizeof(struct midi_info))?-EFAULT:0;
  1244. case SNDCTL_SEQ_THRESHOLD:
  1245. if (get_user(val, (int *)arg))
  1246. return -EFAULT;
  1247. if (val < 1)
  1248. val = 1;
  1249. if (val >= SEQ_MAX_QUEUE)
  1250. val = SEQ_MAX_QUEUE - 1;
  1251. output_threshold = val;
  1252. return 0;
  1253. case SNDCTL_MIDI_PRETIME:
  1254. if (get_user(val, (int *)arg))
  1255. return -EFAULT;
  1256. if (val < 0)
  1257. val = 0;
  1258. val = (HZ * val) / 10;
  1259. pre_event_timeout = val;
  1260. break;
  1261. default:
  1262. if (mode == OPEN_READ)
  1263. return -EIO;
  1264. if (!synth_devs[0])
  1265. return -ENXIO;
  1266. if (!(synth_open_mask & (1 << 0)))
  1267. return -ENXIO;
  1268. if (!synth_devs[0]->ioctl)
  1269. return -EINVAL;
  1270. return synth_devs[0]->ioctl(0, cmd, arg);
  1271. }
  1272. return put_user(val, (int *)arg);
  1273. }
  1274. /* No kernel lock - we're using the global irq lock here */
  1275. unsigned int sequencer_poll(int dev, struct file *file, poll_table * wait)
  1276. {
  1277. unsigned long flags;
  1278. unsigned int mask = 0;
  1279. dev = dev >> 4;
  1280. save_flags(flags);
  1281. cli();
  1282. /* input */
  1283. poll_wait(file, &midi_sleeper, wait);
  1284. if (iqlen)
  1285. mask |= POLLIN | POLLRDNORM;
  1286. /* output */
  1287. poll_wait(file, &seq_sleeper, wait);
  1288. if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
  1289. mask |= POLLOUT | POLLWRNORM;
  1290. restore_flags(flags);
  1291. return mask;
  1292. }
  1293. void sequencer_timer(unsigned long dummy)
  1294. {
  1295. seq_startplay();
  1296. }
  1297. int note_to_freq(int note_num)
  1298. {
  1299. /*
  1300.  * This routine converts a midi note to a frequency (multiplied by 1000)
  1301.  */
  1302. int note, octave, note_freq;
  1303. static int notes[] =
  1304. {
  1305. 261632, 277189, 293671, 311132, 329632, 349232,
  1306. 369998, 391998, 415306, 440000, 466162, 493880
  1307. };
  1308. #define BASE_OCTAVE 5
  1309. octave = note_num / 12;
  1310. note = note_num % 12;
  1311. note_freq = notes[note];
  1312. if (octave < BASE_OCTAVE)
  1313. note_freq >>= (BASE_OCTAVE - octave);
  1314. else if (octave > BASE_OCTAVE)
  1315. note_freq <<= (octave - BASE_OCTAVE);
  1316. /*
  1317.  * note_freq >>= 1;
  1318.  */
  1319. return note_freq;
  1320. }
  1321. unsigned long compute_finetune(unsigned long base_freq, int bend, int range,
  1322.  int vibrato_cents)
  1323. {
  1324. unsigned long amount;
  1325. int negative, semitones, cents, multiplier = 1;
  1326. if (!bend)
  1327. return base_freq;
  1328. if (!range)
  1329. return base_freq;
  1330. if (!base_freq)
  1331. return base_freq;
  1332. if (range >= 8192)
  1333. range = 8192;
  1334. bend = bend * range / 8192; /* Convert to cents */
  1335. bend += vibrato_cents;
  1336. if (!bend)
  1337. return base_freq;
  1338. negative = bend < 0 ? 1 : 0;
  1339. if (bend < 0)
  1340. bend *= -1;
  1341. if (bend > range)
  1342. bend = range;
  1343. /*
  1344.    if (bend > 2399)
  1345.    bend = 2399;
  1346.  */
  1347. while (bend > 2399)
  1348. {
  1349. multiplier *= 4;
  1350. bend -= 2400;
  1351. }
  1352. semitones = bend / 100;
  1353. if (semitones > 99)
  1354. semitones = 99;
  1355. cents = bend % 100;
  1356. amount = (int) (semitone_tuning[semitones] * multiplier * cent_tuning[cents]) / 10000;
  1357. if (negative)
  1358. return (base_freq * 10000) / amount; /* Bend down */
  1359. else
  1360. return (base_freq * amount) / 10000; /* Bend up */
  1361. }
  1362. void sequencer_init(void)
  1363. {
  1364. /* drag in sequencer_syms.o */
  1365. {
  1366. extern char sequencer_syms_symbol;
  1367. sequencer_syms_symbol = 0;
  1368. }
  1369. if (sequencer_ok)
  1370. return;
  1371. MIDIbuf_init();
  1372. queue = (unsigned char *)vmalloc(SEQ_MAX_QUEUE * EV_SZ);
  1373. if (queue == NULL)
  1374. {
  1375. printk(KERN_ERR "sequencer: Can't allocate memory for sequencer output queuen");
  1376. return;
  1377. }
  1378. iqueue = (unsigned char *)vmalloc(SEQ_MAX_QUEUE * IEV_SZ);
  1379. if (iqueue == NULL)
  1380. {
  1381. printk(KERN_ERR "sequencer: Can't allocate memory for sequencer input queuen");
  1382. vfree(queue);
  1383. return;
  1384. }
  1385. sequencer_ok = 1;
  1386. }
  1387. void sequencer_unload(void)
  1388. {
  1389. if(queue)
  1390. {
  1391. vfree(queue);
  1392. queue=NULL;
  1393. }
  1394. if(iqueue)
  1395. {
  1396. vfree(iqueue);
  1397. iqueue=NULL;
  1398. }
  1399. }