LINUX.ORG.RU

Python3 и ALSA = Python int too Large to fit into C Long

 , , ,


0

1

Привет, народ.

Пытаюсь запустить Open Source программу Nano-Basket (настройка MIDI контроллера).

Однако, на строке:

self.event = alsaseq.SeqEvent(alsaseq.SEQ_EVENT_SYSEX)

получаю вот такую ошибку:
Traceback (most recent call last):
  File "/home/daniel/configs/Nano-Basket/./nano_basket_main.py", line 33, in <module>
    Midi_Device = NanoKontrolAlsaMidiComm()
  File "/home/daniel/configs/Nano-Basket/nano_basket_backend.py", line 269, in __init__
    self.event = alsaseq.SeqEvent(alsaseq.SEQ_EVENT_SYSEX)
OverflowError: Python int too large to convert to C long

При добавлении отладочного вывода:
print( "alsaseq.SEQ_EVENT_SYSEX: "+str( int(alsaseq.SEQ_EVENT_SYSEX) ) )

Вижу следующее значение:

alsaseq.SEQ_EVENT_SYSEX: 315701287920557015231746469374140126848057806069433848520996442474077896118040280446827322192982778036935991159410458088858621034602855901831822090957249542454035237858266532406423746184667355646341406675495075296391155014596564577965062354643694753177171515765177344558231920888521336526729754327947612995730269459443629344404521191593403054625932096029258892212307592584049828939880259535763835214469305539836356735613249869911228799956675651622554103861445770814010219159244073507745648250000703350024591332758344364473173395846008868365451882145158578760695509550271688630463095098506898511291039425221333233770177236986045725391119505595248036570982953411623711955801825920921027729570846982511715262600778524621353825145851496489531652828983288054163031843801030412392727901417489077610047264934408166150555940608201872856407413511206173359083516070311558391028193972003488720183479039068178427806738027344778747038954436492511107004297589672250208699482162966403307666332800689253877198682790903233244322329549194860352982466072296480580866480878732354410609338974360551261336806132939982418266558599954613684533679936688065640543177104082203941847816956336839338

Значение несколько великовато как мне кажется.

Как можно исправить данную ошибку?

Страница с ошибкой тут: https://github.com/royvegard/Nano-Basket/issues/11

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Очевидно, в alsaseq.SEQ_EVENT_SYSEX лежит неинициализированный мусор. Я не большой спец в питоне, но, возможно, во второй версии оно неявно инициализировалось нулём, а в третьей — уже нет.

anonymous
()
Ответ на: комментарий от firkax

Походу дела, проблема не в программе, а в ALSA.

Вот команда не с SEQ_EVENT_SYSEX, а с SEQ_EVENT_NOTEON, ошибка практически та же самая:

> python3 -c 'from pyalsa import alsaseq; print(alsaseq.SeqEvent(alsaseq.SEQ_EVENT_NOTEON))'

Traceback (most recent call last):
  File "<string>", line 1, in <module>
OverflowError: signed integer is greater than maximum

Xintrea ★★★★★
() автор топика
Последнее исправление: Xintrea (всего исправлений: 1)

а вы твёрдо уверены что там вообще int ?? откуда он там...

/** Note event */
typedef struct snd_seq_ev_note {
	unsigned char channel;		/**< channel number */
	unsigned char note;		/**< note */
	unsigned char velocity;		/**< velocity */
	unsigned char off_velocity;	/**< note-off velocity; only for #SND_SEQ_EVENT_NOTE */
	unsigned int duration;		/**< duration until note-off; only for #SND_SEQ_EVENT_NOTE */
} snd_seq_ev_note_t;
MKuznetsov ★★★★★
()
Ответ на: комментарий от Xintrea

С чего ты взял что оно у автора работало? В истории коммитов последний вызывающие доверие - 2015 год, вот его проверь. А потом идут какие-то фиксы для новых систем, неизвестно насколько доделанные.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Xintrea

Просто проверил:

$ curl -O https://www.alsa-project.org/files/pub/pyalsa/pyalsa-1.2.7.tar.bz2
$ tar xf pyalsa-1.2.7.tar.bz2
$ cd pyalsa-1.2.7/pyalsa
$ gcc alsaseq.c -shared -fPIC -I/usr/include/python3.11 -lasound -o alsaseq.so
$ python
>>> alsaseq.SeqEvent(alsaseq.SEQ_EVENT_NOTEON)
<alsaseq.SeqEvent type=SEQ_EVENT_NOTEON(6) flags=0 tag=0 queue=253 time=tick(0.0) from=0:0 to=254:253 at 0x7f97912831f0>

Симс гуд. Арч.

anonymous
()