我正在寻找在实践中用于确定不同歌曲之间某种声学相似性的方法.
我到目前为止看到的大多数方法(MFCC等)似乎实际上只是为了找到相同的歌曲(即指纹识别,用于音乐识别而不是推荐).虽然大多数推荐系统似乎都适用于网络数据(共同听歌)和标签.
大多数Mpeg-7音频描述符似乎也沿着这条线.另外,大多数都是在"提取这个和那个"级别上定义的,但似乎没有人真正使用这些功能并使用它们来计算某些歌曲的相似性.即使是对类似物品的有效搜索......
http://gjay.sourceforge.net/和http://imms.luminal.org/等工具似乎使用了一些简单的光谱分析,文件系统位置,标签,以及用户输入,如"颜色"和手动评级由用户分配或者歌曲被聆听和跳过的频率.
那么:对于常见的音乐集合,哪些音频功能可以合理地快速计算,并且可以用于生成有趣的播放列表并找到类似的歌曲?理想情况下,我想提供一个现有的播放列表,然后输出一些与此播放列表相匹配的歌曲.
所以我真的对声学相似性感兴趣,而不是识别/指纹识别.实际上,我只是想从结果中删除相同的歌曲,因为我不想要它们两次.而且我也不是通过哼唱来寻找查询.我甚至没有连接麦克风.
哦,我不是在寻找在线服务.首先,我不想将我的所有数据发送到Apple等,其次我只想从我拥有的歌曲中获得推荐(我现在不想购买额外的音乐,而我还没有探索过我所有的音乐.我甚至都没把我的所有CD转换成mp3 ......)其次我的音乐品味不是主流; 我不希望系统一直推荐Maria Carey.
当然,我真的很感兴趣的是哪种技术运作良好,哪些技术运作良好...感谢您对相关文献和方法的任何建议.
我有一个复杂的Python数据结构(如果它很重要,它是一个很大的music21 Score对象),由于在对象结构内部某处存在弱化,它不会发痒.我以前用堆栈跟踪和python调试器调试过这样的问题,但总是很痛苦.是否有一个工具以递归方式对对象的所有属性运行dir(),查找隐藏在列表,元组,dicts等中的对象,并返回与特定值匹配的那些(lambda函数或类似的东西).一个很大的问题是递归引用,因此需要某种备忘录函数(如copy.deepcopy使用).我试过了:
import weakref
def findWeakRef(streamObj, memo=None):
weakRefList = []
if memo is None:
memo = {}
for x in dir(streamObj):
xValue = getattr(streamObj, x)
if id(xValue) in memo:
continue
else:
memo[id(xValue)] = True
if type(xValue) is weakref.ref:
weakRefList.append(x, xValue, streamObj)
if hasattr(xValue, "__iter__"):
for i in xValue:
if id(i) in memo:
pass
else:
memo[id(i)] = True
weakRefList.extend(findWeakRef(i), memo)
else:
weakRefList.extend(findWeakRef(xValue), memo)
return weakRefList
Run Code Online (Sandbox Code Playgroud)
我大概可以继续在此堵孔(在ITER是不是我想要什么类型的字典,例如),但在此之前我把更多的时间到了,如果有人知道一个更简单的回答不知道.它可能是一个非常有用的通用工具.
我一直在尝试加载一个 MusicXML 文件,对其进行编辑(删除几个部分),并创建一个 PDF 工作表文档 + midi/mp3,所有这些都使用 Python。
我首先查看了music21,这会正确加载我的 MusicXML 文件,但据我所知,不会输出正确的文件(输出文件中的所有详细信息都消失了,剩下的只是注释和标题)
然后我发现abjad这看起来很有希望。它确实输出了高质量的 ly/pdf 文件,但没有导入 musicxml。
然后,我发现Lilypond带有musicxml2ly脚本。我能够调用它并使用sh(很棒的lib!)在python中获取结果lilypond文件,但是abjad lilypond解析器不会解析它(文档说它解析lilypond的“大子集”,没有更多的精度)。
最后,我发现music21有一个 abjad python 对象的导出器,但它似乎不再出现在代码库中,并且导出器的源代码显然只是导出了注释。
我有点别无选择,我能做些什么来实现这些目标?
(补充一点:我仍然不知道如何做第二部分,使用声音字体转到 midi/mp3,但这可能不是最难的部分。有什么建议吗?)
我试图获取所有带有持续时间(度量)的笔记。
from music21 import *
allBach = corpus.search('bach')
x = allBach[0]
p = x.parse()
partStream = p.parts.stream()
for n in p.pitches:
print "Pitch: " + str(n)
print "*************"
for n in p.notes:
print "Note: " + str(n)
#print "Duration " + str(x.parse().duration)
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下输出
Pitch: E5
Pitch: G5
Pitch: A5
Pitch: D5
Pitch: F#5
Pitch: A5
Pitch: D5
Pitch: F#5
Pitch: A5
Pitch: C6
Pitch: G4
Pitch: B4
Pitch: D5
*************
Run Code Online (Sandbox Code Playgroud)
我知道音高只是带有八度音程的音符的名称,但我试图通过其持续时间(小节)获得音符值。
另外,如果你能帮我解决这个问题,你能不能解释一下为什么 p.notes 什么都不返回。谢谢你。
我有这个简单的函数,它分区列表并返回列表中的索引i,使索引小于i的元素小于list [i],索引大于i的元素更大.
def partition(arr):
first_high = 0
pivot = len(arr) - 1
for i in range(len(arr)):
if arr[i] < arr[pivot]:
arr[first_high], arr[i] = arr[i], arr[first_high]
first_high = first_high + 1
arr[first_high], arr[pivot] = arr[pivot], arr[first_high]
return first_high
if __name__ == "__main__":
arr = [1, 5, 4, 6, 0, 3]
pivot = partition(arr)
print(pivot)
Run Code Online (Sandbox Code Playgroud)
OS X上的python 2.7.6的python 3.4运行时间要大得多:
time python3 partition.py
real 0m0.040s
user 0m0.027s
sys 0m0.010s
time python partition.py
real 0m0.031s
user 0m0.018s
sys 0m0.011s
Run Code Online (Sandbox Code Playgroud)
在ubuntu 14.04 /虚拟机上也是如此
python3:
real …Run Code Online (Sandbox Code Playgroud) 我已经下载了一堆 .krn 文件,我想使用 music21 将它们转换为图像 - png 或 jpg。我试过这个:
当我这样做时:
from music21 import *
op = krnfile
s = converter.parse(op)
s.show()
Run Code Online (Sandbox Code Playgroud)
我在我正在使用的 Jupyter Notebook 中看到一个很棒的图像文件,但是当我尝试像这样以编程方式保存该文件时:
s.write(fp = 'outputfile.png', fmt = 'png')
Run Code Online (Sandbox Code Playgroud)
它说:
Music21ObjectException: cannot support showing in this format yet: png
Run Code Online (Sandbox Code Playgroud)
这看起来有点奇怪,因为它显然设法制作图像以在笔记本中显示。
看起来也许我可以使用LilypondConverter.createPNG(fileName=None)这个,但是需要安装 Lilypond 吗?我已经安装了 MuseScore2,当我调用 时它会打开s.show()。
多谢!亚历克斯
我有兴趣查询浏览器中 DOM 元素可能增长到的最大大小。众所周知,空 DOM 元素(没有样式)的 .clientWidth 为 0,但添加文本/图像/等。元素可能会导致其宽度增加。thisOne以下面结构中的DOM 元素为例:
<table style="padding: 20px; border-spacing: 100px">
<tr>
<td></td>
<td>
<div id="thisOne"></div>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
目前#thisOne.clientWidth === 0,但如果我向其附加大量文本,它的宽度会不断增大,但直到它达到为止,document.body.clientWidth因为列、填充类等。我想知道如何计算出对象的当前最大宽度不做类似的事情:
const thisOne = document.getElementById('thisOne');
thisOne.style.visibility = 'hidden'; // do not display to user.
thisOne.innerHTML = 'blah '.repeat(2000);
const maxWidth = thisOne.clientWidth;
thisOne.innerHTML = '';
thisOne.style.visibility = 'visible';
Run Code Online (Sandbox Code Playgroud)
基于 JQuery 的答案很好,但了解纯 HTML/JS 版本会更好。
(如果有人想知道,我计划将音乐符号的 SVG 放入 div 中,但我希望通过在添加之前为渲染器提供适合的宽度,使其能够很好地包裹到其他行上)
是否有某种神奇的SQL语句删除行及其所有依赖项(由外键约束链接)而不更改表以ON DELETE CASCADE手动添加或删除每个相关行?
我正在幻想这样的东西,DELETE FROM `table_a` WHERE `id` = 1 ON DELETE CASCADE;但我似乎无法在doc @ http://dev.mysql.com/doc/refman/5.5/en/delete.html找到任何有效的东西.
ALTER表只更改一次操作的约束,然后使用另一个操作将其还原ALTERDELETE FROM `table_b` WHERE `a_id` = 1;包含FK的每个表执行类似的操作table_a使用MySQL 5.5和InnoDB
在lit/lit-html/lit-element中,标准组件是TemplateResult(通常是HTMLTemplateResult),创建如下:
function renderMe(msg) {
return html`<div>Hello ${msg}!</div>`;
}
Run Code Online (Sandbox Code Playgroud)
当然,该库的强大功能和效率在于,后续调用将重用相同的<div>元素,并且仅替换更改的片段。
然而,为了测试renderMe()上面的函数,能够将返回值视为标准字符串会很有帮助,例如:
assert.equal(RENDER_AS_STRING(renderMe('kimiko')), '<div>Hello kimiko!</div>');
Run Code Online (Sandbox Code Playgroud)
并在测试函数如何呈现到浏览器本身之前修复函数中的任何错误。
RENDER_AS_STRING是否有类似lit 本身或测试库中的函数?我已经搜索过,但没有找到。
我现在正在尝试制作一个用小提琴制作乐谱并将给定音符翻译成弦乐上的位置的程序,但我的问题是,当我问一个琴键是锋利的还是扁平的,以及有多少锐利或平面是在那个关键签名中,我发现我正在制作一堆繁琐的if/then语句,例如:
if keysig == sharp and signum == 2:
note['LE'] == 'D4'
note['SC'] == 'A4'
elif keysig == sharp and signum == 3:
note['LE'] == 'D5'
note['SC'] == 'G2'
Run Code Online (Sandbox Code Playgroud)
你会发现回去做一个稍微改变的另一个陈述变得非常烦人.我怎样才能解决这个问题?
对于那些不阅读乐谱的人:基本上我想说的是这个算法将记录用户输入的音符,如A,G或D,并将它们转换为小提琴指板上的确切位置所以你不必手动搜索笔记.本课程适用于缺乏阅读乐谱经验的小提琴初学者.
python ×6
music21 ×3
python-2.7 ×2
audio ×1
css ×1
dom ×1
foreign-keys ×1
generator ×1
if-statement ×1
javascript ×1
layout ×1
lilypond ×1
lit ×1
lit-html ×1
mfcc ×1
musicxml ×1
mysql ×1
performance ×1
playlists ×1
python-3.x ×1
similarity ×1
sql ×1
translate ×1
width ×1