Forwarded from Solidot
Stephen Wolfram 称找到了物理学基础理论的途径
Wolfram Research 创始人、Mathematica 软件的创作者、数学家/物理学家 Stephen Wolfram 发表博文,宣称找到了通往物理学基础理论的途径。Wolfram 称,1980 年代初他开始研究简单程序产生的计算宇宙时得到了一个惊人而重要的发现:即使一个系统的底层规则十分简单,总体上的系统行为能任意的丰富而复杂。这促使他思考:宇宙是不是也是以此方式工作的?我们在物理中所看到的丰富性和复杂性其底层是否是简单的规则。他因此写下了 100 页的《一种新科学》。现在,在年轻物理学家的督促下,他再次发表了 448 页的技术论文,描述了我们宇宙的物理属性从简单通用可计算的规则产生出来。Wolfram 表示这些属性与相对论和量子理论一致。其他人认为他的理论和弦论一样难以验证。Media
https://www.solidot.org/story?sid=64129
Wolfram Research 创始人、Mathematica 软件的创作者、数学家/物理学家 Stephen Wolfram 发表博文,宣称找到了通往物理学基础理论的途径。Wolfram 称,1980 年代初他开始研究简单程序产生的计算宇宙时得到了一个惊人而重要的发现:即使一个系统的底层规则十分简单,总体上的系统行为能任意的丰富而复杂。这促使他思考:宇宙是不是也是以此方式工作的?我们在物理中所看到的丰富性和复杂性其底层是否是简单的规则。他因此写下了 100 页的《一种新科学》。现在,在年轻物理学家的督促下,他再次发表了 448 页的技术论文,描述了我们宇宙的物理属性从简单通用可计算的规则产生出来。Wolfram 表示这些属性与相对论和量子理论一致。其他人认为他的理论和弦论一样难以验证。Media
https://www.solidot.org/story?sid=64129
为实现扒谱程序做了一点搜集
https://github.com/nwhitehead/pyfluidsynth 可以作为音阶合成库
https://github.com/vishnubob/python-midi 可以作为 MIDI 库
https://pypi.org/project/pyreadline/ 可以作为 CLI 监听库
MIDI 这个比较灵性,它不像 subtitle 那么简单,一个 MID 文件是由 events 构成的,如 NoteOn(tick,veloc,pitch), NoteOff(tick,pitch), EndOfTrack
程序的设计大概有两个过程
第一个过程利用数字键盘输入(
可以用 Delete 删除上个音阶、 C-R 重放一遍、 C-I 粘贴、 Enter 确认
第二个过程可配合进度条和时间
用 A 来创建音符事件(但不会改变音高流)、S 来迭代下一个音高(从保持按下的A键切分)
用 Delete 回溯 5s 的音符,用 Enter 确认
-note-base 是指简谱基础音高
-play music 是在 cliReadTimeline 时配合放的音乐文件
-hot 是个 flag,可以禁用 S 键并且让 A 键带有迭代音高的效果
https://github.com/nwhitehead/pyfluidsynth 可以作为音阶合成库
https://github.com/vishnubob/python-midi 可以作为 MIDI 库
https://pypi.org/project/pyreadline/ 可以作为 CLI 监听库
MIDI 这个比较灵性,它不像 subtitle 那么简单,一个 MID 文件是由 events 构成的,如 NoteOn(tick,veloc,pitch), NoteOff(tick,pitch), EndOfTrack
程序的设计大概有两个过程
def cliReadPitches(note_base=note.C) -> List[int]
def cliReadTimeline(mode="normal", seekback_ms = 5000) -> List[Subtitle] 第一个过程利用数字键盘输入(
[12] 这个语法可以输入高音阶 )可以用 Delete 删除上个音阶、 C-R 重放一遍、 C-I 粘贴、 Enter 确认
第二个过程可配合进度条和时间
用 A 来创建音符事件(但不会改变音高流)、S 来迭代下一个音高(从保持按下的A键切分)
用 Delete 回溯 5s 的音符,用 Enter 确认
-note-base 是指简谱基础音高
-play music 是在 cliReadTimeline 时配合放的音乐文件
-hot 是个 flag,可以禁用 S 键并且让 A 键带有迭代音高的效果
GitHub
GitHub - nwhitehead/pyfluidsynth: Python bindings for FluidSynth
Python bindings for FluidSynth. Contribute to nwhitehead/pyfluidsynth development by creating an account on GitHub.
import pyaudio, fluidsynth
RATE = 44100
pa = pyaudio.PyAudio()
stream = pa.open(RATE, 2, pyaudio.paInt16, output=True)
class NoteSynth:
def __init__(self):
self.synth = fluidsynth.Synth()
def setFont(self, path_sfont):
self.synth.program_select(0, self.synth.sfload(path_sfont), 0, 0)
def sampleNotePitch(self, pitch, n):
self.synth.noteoff(0, pitch)
self.synth.noteon(0, pitch, 100)
return self.synth.get_samples(RATE*n)
synth = NoteSynth()
synth.setFont("example.sf2")
stream.write(synth.sampleNotePitch(20, 5))#include <stdbool.h>🤔 这样就可以 bind key,然后用来处理事件了…… 可是我想要 keydown/keyup 两种事件啊
#include <stdio.h>
#include <readline/readline.h>
int handle_key(int count, int key) {
printf("pressed: %d\n", key);
rl_on_new_line();
return 0;
}
int main(int argc, char *argv[]) {
rl_command_func_t handle_key;
rl_bind_key('\t', handle_key);
rl_bind_keyseq("\\C-a", handle_key);
while (true) {
char *line = readline(">");
}
}
https://stackoverflow.com/questions/26811132/pygame-keyup-keydown 🤔看来只有 Pygame 可以这么弄了……
Stack Overflow
Pygame Keyup/Keydown
I'm making a little Mario for my school's Computer Club. (well, as part of a team.)
Anyway, I'm having some trouble with the "keyup/keydown" commands. Here's my code:
# 1 - Import library
import ...
Anyway, I'm having some trouble with the "keyup/keydown" commands. Here's my code:
# 1 - Import library
import ...
def reprint(s): print("\33[2K", s, sep="", end="") 这样应该就没问题了吧
duangsuse::Echo
为实现扒谱程序做了一点搜集 https://github.com/nwhitehead/pyfluidsynth 可以作为音阶合成库 https://github.com/vishnubob/python-midi 可以作为 MIDI 库 https://pypi.org/project/pyreadline/ 可以作为 CLI 监听库 MIDI 这个比较灵性,它不像 subtitle 那么简单,一个 MID 文件是由 events 构成的,如 NoteOn(tick,veloc,pitch), NoteOff(tick…
😐如果用 OpenCV,不合适;如果用 PyGame,那 keyseq 会很麻烦;如果用 readline,不仅 Windows 不支持而且没有 keyup 事件
a=synth.sampleNotePitch(30, 5)
s=pygame.mixer.Sound(array=array([a,a]).transpose().copy()) 失败了… 看来 pygame.mixer 只能用来做最后一步的 audio……
from pygame import mixer_music as music
music.load(filepath)
music.set_pos(music.get_pos())
music.set_volume() music.set_endeventhachi.py
2.6 KB
15:11 - error: Argument of type 'Union[str, NoReturn]' cannot be assigned to parameter 'name' of type 'str'🌚我居然无言以对。 #Python
Type 'NoReturn' cannot be assigned to type 'str'
'NoReturn' is incompatible with 'str'
synthesize.py
6 KB
好了,终于可以摆脱这个不过 700 行 ctypes 代码还不 pull 别人的修复 PR 的 repo 了
duangsuse::Echo
为实现扒谱程序做了一点搜集 https://github.com/nwhitehead/pyfluidsynth 可以作为音阶合成库 https://github.com/vishnubob/python-midi 可以作为 MIDI 库 https://pypi.org/project/pyreadline/ 可以作为 CLI 监听库 MIDI 这个比较灵性,它不像 subtitle 那么简单,一个 MID 文件是由 events 构成的,如 NoteOn(tick,veloc,pitch), NoteOff(tick…
……其实设计到现在我觉得还是蛮有出入的,毕竟我一不熟悉 MIDI 二不熟悉 GUI 一堆不止是按步骤依赖去 make 而不考虑 events, threading 的东西
主要还是开始录音高的时候,原因居然是因为我觉得那样显得高级不少:
这个原因很智障,而且莫名其妙,是不是 😂
我居然还在考虑那个 code 可以在某种程度上自动和终端上的更新…… 只要我做好类似
后来我发现…… 其实是我想多了,因为音高的确认往往是(没错,劳资就是不懂乐理、劳资就是只知道音高数字)需要很多次测试才能完成的,所以按下 Enter 键来确认而不是不断删除,反而是一个合理的做法……
说句题外话, fluidsynth 的 start() 方法也修好了,所以不必用 pyaudio 了,emmm
主要还是开始录音高的时候,原因居然是因为我觉得那样显得高级不少:
def onAppend():
if n in range(0, 9+1):
code.append(str(n))
pitches.append(n)
print(n, end="")
else:
code.append(f"[{n}]")
pitches.pop()
print(f"[{n}]", end="")
def onDelete():
if code[-1] == ']':
code = code.lstrip(string.digits)[:-1]#'['
reprint(code)
else: removeNChar(1) 这个原因很智障,而且莫名其妙,是不是 😂
我居然还在考虑那个 code 可以在某种程度上自动和终端上的更新…… 只要我做好类似
update_line(new_code, code, mode="len_subtract") 这种,然后就可以 dropWhileRight 什么的…… 真是蠢后来我发现…… 其实是我想多了,因为音高的确认往往是(没错,劳资就是不懂乐理、劳资就是只知道音高数字)需要很多次测试才能完成的,所以按下 Enter 键来确认而不是不断删除,反而是一个合理的做法……
说句题外话, fluidsynth 的 start() 方法也修好了,所以不必用 pyaudio 了,emmm
srt.compose(srt.Subtitle(i, v.start, v.end, v.content) for i, v in enumerate(srts)) 🤔 把 index 信息混进去好像也不太难import re#Python #code 停,不用 regex 了,我们用 pyparsing!
pat_cdecl = re.compile(r"(\w+)\s+(\w+)\((((\w+)\s+(\w+))(,\s*(\w+)\s+(\w+))*)?\);")
ctype = {
"void*": c_void, "char*": c_char_p,
"int": c_int, "double": c_double
}.__getitem__
def foreign(cdecl):
"""t_result name(type name, ...args);"""
m = pat_cdecl.match(cdecl).groups()
t_result, name = m[0:2]
if m[3] == None: return cfunc(name, ctype(t_result))
args = [(m[i+2], ctype(m[i+1])) for i in range(3, len(m), 3)]
return cfunc(name, ctype(t_result), *args)
注: pyparsing 是老项目了,设计表现力和 ParserKt 有点像 https://github.com/pyparsing/pyparsing/blob/master/examples/jsonParser.py
GitHub
pyparsing/examples/jsonParser.py at master · pyparsing/pyparsing
Python library for creating PEG parsers. Contribute to pyparsing/pyparsing development by creating an account on GitHub.