前提・実現したいこと
FM音源に興味を持ったのでraspberryPiとYMF825boardを用いてDX7のようなFMシンセを作成しようと考えています。
発生している問題・エラーメッセージ
現在下記リンクのサンプルをpythonでRaspberryPi用に書き直そうとしています
Arduinoを用いたサンプル
実際に書き込む処理をどのようにpythonでどの用に書き直したらいいのかがわかりません。
現状のソースコードではエラーもなく実行されますが、音がなりません。
該当のソースコード
python
1import wiringpi as wp 2import time 3#========================== 4SPI_CH = 0 # SPI channel (0 or 1) 5SPI_SPEED = 2000000 #SPI 2MHz 6 7SS_PIN = 22 8RST_PIN = 36 9 10#setup 11wp.wiringPiSPISetup (SPI_CH, SPI_SPEED) 12wp.wiringPiSetupGpio() 13 14 15 16def set_ss_pin(val): 17 if val == 1: 18 wp.digitalWrite(SS_PIN, wp.GPIO.HIGH) 19 else: 20 wp.digitalWrite(SS_PIN, wp.GPIO.LOW) 21 22 23def set_rst_pin(val): 24 if val == 1: 25 wp.digitalWrite(RST_PIN, wp.GPIO.HIGH) 26 else: 27 wp.digitalWrite(RST_PIN, wp.GPIO.LOW) 28 29 30def if_write(addr,data): 31 addr = addr.to_bytes(1, 'big') 32 data = data.to_bytes(1, 'big') 33 34 set_ss_pin(0) 35 wp.wiringPiSPIDataRW(SPI_CH, addr) 36 wp.wiringPiSPIDataRW(SPI_CH, data) 37 set_ss_pin(1) 38 39def if_m_write(addr,data,num): 40 41 addr = addr.to_bytes(1, 'big') 42 set_ss_pin(0) 43 wp.wiringPiSPIDataRW(SPI_CH, addr) 44 for i in range(0,35) : 45 data[i] = data[i].to_bytes(1, 'big') 46 wp.wiringPiSPIDataRW(SPI_CH, data[i]) 47 set_ss_pin(1) 48 49 50def delay(sec): 51 time.sleep(sec/1000) 52 53 54#init 55def init_825(): 56 57 set_rst_pin(0) 58 delay(1) 59 set_rst_pin(1) 60 61 if_write(0x1D,0)#OutPower 62 if_write(0x02,0x0E) 63 delay(1) 64 65 if_write(0x00,0x01)#CLKEN 66 if_write(0x01,0x00)#AKRST 67 if_write(0x1A,0xA3)#soft reset 68 delay(1) 69 70 if_write(0x1A,0x00) 71 delay(30) 72 73 if_write(0x02,0x04) 74 delay(1) 75 if_write(0x02,0x00) 76 77 #add 78 if_write( 0x19, 0xF0 )#MASTER VOL 79 if_write( 0x1B, 0x3F )#interpolation 80 if_write( 0x14, 0x00 )#interpolation 81 if_write( 0x03, 0x01 )#Analog Gain 82 83 if_write( 0x08, 0xF6 ) 84 delay(21); 85 if_write( 0x08, 0x00 ) 86 if_write( 0x09, 0xF8 ) 87 if_write( 0x0A, 0x00 ) 88 89 if_write( 0x17, 0x40 ) 90 if_write( 0x18, 0x00 ) 91 92 93#============= 94def set_tone(): 95 tone_data =[ 96 0x81,\ 97 0,\ 98 0x01,0x85,\ 99 0x00,0x7F,0xF4,0xBB,0x00,0x10,0x40,\ 100 0x00,0xAF,0xA0,0x0E,0x03,0x10,0x40,\ 101 0x00,0x2F,0xF3,0x9B,0x00,0x20,0x41,\ 102 0x00,0xAF,0xA0,0x0E,0x01,0x10,0x40,\ 103 0x80,0x03,0x81,0x80] 104 105 if_write(0x08,0xF6) 106 delay(1) 107 if_write(0x08,0x00) 108 109 if_m_write(0x07,tone_data,35) 110 111#============= 112 113def set_ch(): 114 if_write( 0x0F, 0x30 ) 115 if_write( 0x10, 0x71 ) 116 if_write( 0x11, 0x00 ) 117 if_write( 0x12, 0x08 ) 118 if_write( 0x13, 0x00 ) 119 120def keyon(fnumh,fnuml): 121 if_write( 0x0B, 0x00 ) 122 if_write( 0x0C, 0x54 ) 123 if_write( 0x0D, fnumh ) 124 if_write( 0x0E, fnuml ) 125 if_write( 0x0F, 0x40 ) 126 127def keyoff(): 128 if_write(0x0F,0x00) 129 130#================== 131 132if __name__ == '__main__' : 133 134 135 init_825() 136 set_tone() 137 set_ch() 138 139 140 keyon(0x1c,0x11) 141 delay(500) 142 keyoff() 143 delay(200) 144 145 146
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/09 12:21
2018/04/09 12:31