最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python解碼音樂(lè)并實(shí)現(xiàn)鋼琴模擬器

 更新時(shí)間:2025年11月05日 09:52:26   作者:傻啦嘿喲  
本文將通過(guò)三個(gè)維度展開(kāi)探索,用Python解析自然大調(diào)的數(shù)學(xué)規(guī)律,模擬鋼琴的物理結(jié)構(gòu)特性,最后通過(guò)循環(huán)美學(xué)創(chuàng)作生成式音樂(lè),感興趣的小伙伴可以了解下

一、音樂(lè)與編程的奇妙共鳴

當(dāng)貝多芬在琴鍵上揮灑靈感時(shí),他或許想不到兩百年后,程序員能用代碼重現(xiàn)《月光奏鳴曲》的數(shù)學(xué)之美。音樂(lè)與編程看似分屬藝術(shù)與科技兩端,實(shí)則共享著相同的底層邏輯:節(jié)奏對(duì)應(yīng)循環(huán)結(jié)構(gòu),音階構(gòu)成數(shù)據(jù)序列,和聲演繹算法組合。

本文將通過(guò)三個(gè)維度展開(kāi)探索:用Python解析自然大調(diào)的數(shù)學(xué)規(guī)律,模擬鋼琴的物理結(jié)構(gòu)特性,最后通過(guò)循環(huán)美學(xué)創(chuàng)作生成式音樂(lè)。所有代碼均可在普通電腦上運(yùn)行,建議搭配耳機(jī)體驗(yàn)最佳。

二、自然大調(diào)的數(shù)學(xué)密碼

1. 十二平均律的Python實(shí)現(xiàn)

現(xiàn)代音樂(lè)建立在十二平均律基礎(chǔ)上,將一個(gè)八度均分為12個(gè)半音。每個(gè)半音頻率比為2的1/12次方:

import math

def calculate_frequencies(base_freq=440, semitones=12):
    frequencies = []
    for n in range(semitones + 1):
        freq = base_freq * (2 ** (n / semitones))
        frequencies.append(round(freq, 2))
    return frequencies

# 計(jì)算A大調(diào)音階頻率(以A4=440Hz為基準(zhǔn))
a_major_scale = calculate_frequencies(440)[0::2]  # 取隔一個(gè)音的八度音階
print("A大調(diào)音階頻率(Hz):", a_major_scale)

運(yùn)行結(jié)果將顯示從A4到A5的7個(gè)自然大調(diào)音階頻率,驗(yàn)證了全音(大二度)頻率比約為1.122,半音(小二度)約為1.059的數(shù)學(xué)關(guān)系。

2. 音程關(guān)系的可視化

通過(guò)Matplotlib繪制音程頻率比的熱力圖,直觀展示和諧音程的數(shù)學(xué)特征:

import matplotlib.pyplot as plt
import numpy as np

interval_names = ['同度', '純八度', '純五度', '純四度', '大三度', '小三度']
interval_ratios = [1/1, 2/1, 3/2, 4/3, 5/4, 6/5]

fig, ax = plt.subplots(figsize=(10, 4))
cax = ax.matshow([[r] for r in interval_ratios], cmap='coolwarm')
ax.set_xticks(np.arange(1))
ax.set_yticks(np.arange(len(interval_names)))
ax.set_xticklabels(['頻率比'])
ax.set_yticklabels(interval_names)
fig.colorbar(cax)
plt.title("音程頻率比和諧度可視化")
plt.show()

圖表顯示:純五度(3:2)和純四度(4:3)的比值接近簡(jiǎn)單整數(shù)比,這正是它們聽(tīng)起來(lái)和諧的原因。

3. 構(gòu)建大調(diào)音階生成器

用生成器函數(shù)實(shí)現(xiàn)任意調(diào)式的音階生成:

def piano_string_simulation(length=0.655, tension=700, linear_density=0.00785):
    """
    length: 弦長(zhǎng)(m) (A4弦長(zhǎng)約0.655m)
    tension: 張力(N)
    linear_density: 線密度(kg/m)
    """
    # 基頻計(jì)算
    v = math.sqrt(tension / linear_density)  # 波速
    fundamental_freq = v / (2 * length)
    
    # 前5個(gè)泛音頻率
    harmonics = [fundamental_freq * (i+1) for i in range(5)]
    
    # 計(jì)算各泛音衰減系數(shù)(模擬實(shí)際鋼琴的音色特性)
    decay_factors = [0.8, 0.5, 0.3, 0.2, 0.1]
    
    return list(zip(harmonics, decay_factors))

# 模擬A4弦的振動(dòng)特性
a4_string = piano_string_simulation()
print("A4弦振動(dòng)特性:", a4_string)

這個(gè)生成器可以輕松創(chuàng)建任何自然大調(diào)的音階頻率列表,為后續(xù)音樂(lè)生成奠定基礎(chǔ)。

三、鋼琴結(jié)構(gòu)的數(shù)字建模

1. 鋼琴弦振動(dòng)模擬

鋼琴的音色源于琴弦的復(fù)雜振動(dòng)模式。用物理模型模擬琴弦的基頻與泛音:

def piano_string_simulation(length=0.655, tension=700, linear_density=0.00785):
    """
    length: 弦長(zhǎng)(m) (A4弦長(zhǎng)約0.655m)
    tension: 張力(N)
    linear_density: 線密度(kg/m)
    """
    # 基頻計(jì)算
    v = math.sqrt(tension / linear_density)  # 波速
    fundamental_freq = v / (2 * length)
    
    # 前5個(gè)泛音頻率
    harmonics = [fundamental_freq * (i+1) for i in range(5)]
    
    # 計(jì)算各泛音衰減系數(shù)(模擬實(shí)際鋼琴的音色特性)
    decay_factors = [0.8, 0.5, 0.3, 0.2, 0.1]
    
    return list(zip(harmonics, decay_factors))

# 模擬A4弦的振動(dòng)特性
a4_string = piano_string_simulation()
print("A4弦振動(dòng)特性:", a4_string)

輸出結(jié)果展示了基頻(440Hz)及其前四個(gè)泛音的頻率和相對(duì)強(qiáng)度,這正是鋼琴音色豐富性的來(lái)源。

2. 鍵盤布局的矩陣表示

將88鍵鋼琴鍵盤轉(zhuǎn)換為二維矩陣,便于算法處理:

def create_piano_matrix():
    # 88鍵鋼琴的鍵名列表(A0-C8)
    notes = []
    for octave in range(0, 9):
        for note in ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']:
            if (octave == 0 and note in ['A', 'A#', 'B']) or \
               (octave == 8 and note in ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']):
                continue  # 跳過(guò)實(shí)際不存在的鍵
            notes.append(f"{note}{octave}")
    
    # 轉(zhuǎn)換為10x10矩陣(實(shí)際88鍵)
    matrix = []
    for i in range(0, 88, 10):
        matrix.append(notes[i:i+10])
    
    return matrix

piano_matrix = create_piano_matrix()
for row in piano_matrix[:3]:  # 顯示前3行
    print(row)

這個(gè)矩陣結(jié)構(gòu)為后續(xù)實(shí)現(xiàn)鍵盤掃描算法和音樂(lè)生成提供了便利的數(shù)據(jù)結(jié)構(gòu)。

3. 力度響應(yīng)曲線建模

鋼琴的觸鍵力度與音量呈非線性關(guān)系。用對(duì)數(shù)函數(shù)模擬這種響應(yīng)特性:

import numpy as np

def velocity_curve(key_velocity):
    """
    key_velocity: 按鍵速度(0-127)
    返回: 音量系數(shù)(0.0-1.0)
    """
    # 使用對(duì)數(shù)曲線模擬鋼琴的力度響應(yīng)
    return 1 - np.exp(-key_velocity / 50)

# 測(cè)試不同力度的響應(yīng)
velocities = range(0, 128, 16)
responses = [round(velocity_curve(v), 3) for v in velocities]
print("力度響應(yīng)表:", list(zip(velocities, responses)))

輸出顯示:輕觸(力度<32)時(shí)音量增長(zhǎng)緩慢,重?fù)簦Χ?gt;96)時(shí)音量接近飽和,完美復(fù)現(xiàn)了鋼琴的觸鍵特性。

四、循環(huán)美學(xué)的音樂(lè)生成

1. 基礎(chǔ)循環(huán)結(jié)構(gòu)實(shí)現(xiàn)

用Python的循環(huán)語(yǔ)句創(chuàng)建簡(jiǎn)單的節(jié)奏模式:

def generate_rhythm_pattern(beats=4, subdivisions=4):
    """生成節(jié)奏模式"""
    pattern = []
    for beat in range(beats):
        for sub in range(subdivisions):
            # 簡(jiǎn)單模式:每小節(jié)第1拍和第3拍為強(qiáng)拍
            is_accent = (beat % 2 == 0 and sub == 0) or \
                       (beat % 2 == 1 and sub == subdivisions//2)
            pattern.append(1.0 if is_accent else 0.7)
    return pattern

rhythm = generate_rhythm_pattern(4, 4)
print("4/4拍節(jié)奏模式:", [round(x, 2) for x in rhythm])

這個(gè)模式可以輕松擴(kuò)展為更復(fù)雜的復(fù)合節(jié)奏,如5/8拍或7/8拍。

2. 循環(huán)音樂(lè)生成器

結(jié)合前面的大調(diào)音階和節(jié)奏模式,創(chuàng)建完整的音樂(lè)生成器:

import random

def music_generator(scale_freqs, rhythm_pattern, duration=0.5):
    """
    scale_freqs: 音階頻率列表
    rhythm_pattern: 節(jié)奏強(qiáng)度列表
    duration: 每個(gè)音符的持續(xù)時(shí)間(秒)
    """
    from pydub import AudioSegment
    from pydub.generators import Sine
    
    combined = AudioSegment.silent(duration=100)  # 初始化音頻
    
    for freq, volume in zip(cycle(scale_freqs), rhythm_pattern):
        # 創(chuàng)建正弦波音符
        sine_wave = Sine(freq).to_audio_segment(duration=int(duration * 1000))
        # 根據(jù)節(jié)奏強(qiáng)度調(diào)整音量
        adjusted_volume = int(volume * -20)  # pydub的音量范圍是-96到0
        sine_wave = sine_wave + adjusted_volume
        combined += sine_wave
    
    return combined

# 需要先安裝pydub: pip install pydub
# 生成音樂(lè)示例(需替換為實(shí)際可用的音頻輸出代碼)
# from itertools import cycle
# scale = major_scale_generator('C')
# rhythm = generate_rhythm_pattern(8, 3)  # 8/3拍節(jié)奏
# music = music_generator(scale, rhythm)
# music.export("generated_music.wav", format="wav")

(注:完整音頻生成需要安裝pydub和FFmpeg,示例代碼展示了核心邏輯)

3. 遞歸分形音樂(lè)

利用遞歸算法生成具有自相似結(jié)構(gòu)的分形音樂(lè):

def fractal_melody(base_note, depth=3, length=4):
    """遞歸生成分形旋律"""
    if depth == 0:
        return [base_note] * length
    
    melody = []
    for i in range(length):
        # 每次遞歸音高偏移+5半音(大三度)
        new_note = base_note + 5 * (i % 2)  
        melody.extend(fractal_melody(new_note, depth-1, length//2))
    
    return melody

# 生成C大調(diào)的分形旋律
c_base = 60  # MIDI音號(hào)(C4=60)
fractal = fractal_melody(c_base)
print("分形旋律(MIDI音號(hào)):", fractal[:16])  # 顯示前16個(gè)音符

這種結(jié)構(gòu)產(chǎn)生的旋律具有自相似性,類似于《卡農(nóng)》中的主題變奏。

五、實(shí)戰(zhàn)項(xiàng)目:Python鋼琴模擬器

1. 完整實(shí)現(xiàn)代碼

import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Audio, display

class PythonPiano:
    def __init__(self):
        self.notes = self._create_note_table()
        self.sample_rate = 44100
    
    def _create_note_table(self):
        """創(chuàng)建88鍵鋼琴的頻率表"""
        notes = []
        for octave in range(0, 9):
            for note in ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']:
                if (octave == 0 and note in ['A', 'A#', 'B']) or \
                   (octave == 8 and note in ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']):
                    continue
                notes.append((f"{note}{octave}", 440 * (2 ** ((self._note_to_semitone(note, octave) - 9) / 12)))))
        return dict(notes)
    
    def _note_to_semitone(self, note, octave):
        """計(jì)算從A0開(kāi)始的半音數(shù)"""
        note_order = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']
        base = note_order.index(note) + octave * 12
        if note in ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']:
            base += 12  # 調(diào)整C大調(diào)基準(zhǔn)
        return base
    
    def _generate_note_wave(self, freq, duration=0.5, velocity=100):
        """生成單個(gè)音符的波形"""
        t = np.linspace(0, duration, int(self.sample_rate * duration), endpoint=False)
        # 基礎(chǔ)正弦波
        wave = np.sin(2 * np.pi * freq * t)
        
        # 添加泛音(簡(jiǎn)化版鋼琴音色)
        harmonics = [
            (freq * 2, 0.5),
            (freq * 3, 0.3),
            (freq * 4, 0.1)
        ]
        for h_freq, h_amp in harmonics:
            wave += h_amp * np.sin(2 * np.pi * h_freq * t)
        
        # 應(yīng)用力度曲線
        volume = self._velocity_curve(velocity)
        wave *= volume
        
        # 添加ADSR包絡(luò)(簡(jiǎn)化版)
        attack = 0.05
        decay = 0.1
        sustain_level = 0.7
        release = 0.1
        
        envelope = np.zeros_like(t)
        # Attack階段
        mask = t < attack
        envelope[mask] = t[mask] / attack
        # Decay階段
        mask = (t >= attack) & (t < attack + decay)
        envelope[mask] = 1 - (1 - sustain_level) * (t[mask] - attack) / decay
        # Sustain階段
        mask = (t >= attack + decay) & (t < duration - release)
        envelope[mask] = sustain_level
        # Release階段
        mask = t >= duration - release
        envelope[mask] = sustain_level * (1 - (t[mask] - (duration - release)) / release)
        
        wave *= envelope
        return wave
    
    def _velocity_curve(self, velocity):
        """力度響應(yīng)曲線"""
        return 1 - np.exp(-velocity / 50)
    
    def play_note(self, note_name, duration=0.5, velocity=100):
        """播放單個(gè)音符"""
        if note_name not in self.notes:
            raise ValueError("無(wú)效的音符名稱")
        
        freq = self.notes[note_name]
        wave = self._generate_note_wave(freq, duration, velocity)
        
        # 在Jupyter中顯示音頻
        display(Audio(wave, rate=self.sample_rate))
        
        return wave
    
    def play_chord(self, note_names, duration=0.5, velocity=100):
        """播放和弦"""
        waves = []
        for note in note_names:
            freq = self.notes[note]
            waves.append(self._generate_note_wave(freq, duration, velocity))
        
        combined_wave = np.sum(waves, axis=0) / len(waves)
        display(Audio(combined_wave, rate=self.sample_rate))
        return combined_wave

# 使用示例(在Jupyter環(huán)境中運(yùn)行)
piano = PythonPiano()
piano.play_note("C4")  # 播放中央C
piano.play_chord(["C4", "E4", "G4"])  # 播放C大三和弦

2. 功能擴(kuò)展建議

  • MIDI輸入支持:通過(guò)mido庫(kù)讀取MIDI鍵盤輸入
  • 可視化鍵盤:用Matplotlib創(chuàng)建交互式鋼琴鍵盤
  • 音頻導(dǎo)出:添加WAV文件導(dǎo)出功能
  • 效果器:實(shí)現(xiàn)混響、延遲等音頻效果

六、常見(jiàn)問(wèn)題Q&A

Q1:為什么生成的音頻有雜音?

A:可能是采樣率設(shè)置不當(dāng)或泛音疊加過(guò)多。嘗試降低泛音數(shù)量或調(diào)整其振幅比例。建議使用44100Hz采樣率,這是CD音質(zhì)標(biāo)準(zhǔn)。

Q2:如何生成更真實(shí)的鋼琴音色?

A:真實(shí)鋼琴有更多泛音(可達(dá)10個(gè)以上)和復(fù)雜的ADSR包絡(luò)??梢裕?/p>

  • 增加泛音數(shù)量至8-10個(gè)
  • 實(shí)現(xiàn)更精確的ADSR曲線(攻擊0.02s,衰減0.3s,持續(xù)0.5s,釋放0.1s)
  • 添加琴槌擊弦的噪聲樣本

Q3:Python生成的音樂(lè)文件很大怎么辦?

A:音頻數(shù)據(jù)本質(zhì)是大量浮點(diǎn)數(shù)。優(yōu)化方法:

  • 降低采樣率(22050Hz對(duì)語(yǔ)音足夠)
  • 使用16位深度代替32位
  • 應(yīng)用音頻壓縮算法(如MP3編碼)

Q4:如何實(shí)現(xiàn)多聲部音樂(lè)生成?

A:為每個(gè)聲部創(chuàng)建獨(dú)立的波形生成器,最后混合所有聲部。注意:

  • 不同聲部使用不同音色參數(shù)
  • 添加聲部間的音量平衡
  • 實(shí)現(xiàn)聲部間的節(jié)奏錯(cuò)位

Q5:沒(méi)有音頻輸出怎么辦?

A:檢查:

  • 是否在Jupyter環(huán)境中運(yùn)行(display(Audio)需要IPython支持)
  • 是否安裝了FFmpeg(用于音頻處理)
  • 嘗試導(dǎo)出WAV文件本地播放

七、進(jìn)階學(xué)習(xí)路徑

  • 音頻處理庫(kù):深入學(xué)習(xí)Librosa(音頻分析)和SoundDevice(實(shí)時(shí)音頻)
  • 音樂(lè)理論:學(xué)習(xí)調(diào)式、和弦進(jìn)行、對(duì)位法等音樂(lè)理論知識(shí)
  • 機(jī)器學(xué)習(xí):嘗試用Magenta或MuseNet等AI音樂(lè)生成工具
  • 硬件集成:通過(guò)Arduino或Raspberry Pi制作實(shí)體音樂(lè)控制器

掌握這些技術(shù)后,你不僅能理解音樂(lè)背后的數(shù)學(xué)原理,更能創(chuàng)造出獨(dú)一無(wú)二的音樂(lè)作品。從自然大調(diào)的和諧之美到鋼琴結(jié)構(gòu)的物理特性,再到循環(huán)算法的數(shù)學(xué)魅力,Python為我們打開(kāi)了音樂(lè)編程的全新維度?,F(xiàn)在,是時(shí)候用代碼譜寫你的數(shù)字樂(lè)章了!

以上就是使用Python解碼音樂(lè)并實(shí)現(xiàn)鋼琴模擬器的詳細(xì)內(nèi)容,更多關(guān)于Python鋼琴模擬器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python進(jìn)階語(yǔ)法之類的繼承

    Python進(jìn)階語(yǔ)法之類的繼承

    這篇文章主要為大家介紹了Python類的繼承,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Django框架之登錄后自定義跳轉(zhuǎn)頁(yè)面的實(shí)現(xiàn)方法

    Django框架之登錄后自定義跳轉(zhuǎn)頁(yè)面的實(shí)現(xiàn)方法

    這篇文章主要介紹了Django框架之登錄后自定義跳轉(zhuǎn)頁(yè)面的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法詳解

    Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下
    2022-09-09
  • django中使用memcached示例詳解

    django中使用memcached示例詳解

    這篇文章主要為大家介紹了django中使用memcached示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python 列表的基本操作介紹

    Python 列表的基本操作介紹

    這篇文章主要介紹了Python 列表的基本操作,下面文章圍繞Python 列表的相關(guān)資料展開(kāi)文章的詳細(xì)內(nèi)容,,需要的朋友可以參考一下,希望對(duì)大家有所幫助
    2021-11-11
  • python3文件復(fù)制、延遲文件復(fù)制任務(wù)的實(shí)現(xiàn)方法

    python3文件復(fù)制、延遲文件復(fù)制任務(wù)的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于python3文件復(fù)制、延遲文件復(fù)制任務(wù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 備戰(zhàn)618!用Python腳本幫你實(shí)現(xiàn)淘寶秒殺

    備戰(zhàn)618!用Python腳本幫你實(shí)現(xiàn)淘寶秒殺

    本次的文章,分享一個(gè)淘寶秒殺腳本,這個(gè)腳本用Python編寫,使用了Python庫(kù)selenium,并且通過(guò)selenium + chromedriver,用程序控制chrome瀏覽器,完成搶購(gòu)的一系列操作.有了這個(gè)腳本,大家至少可以與其他的機(jī)器人站在同一起跑線上,公平搶購(gòu)喜歡的寶貝 ,需要的朋友可以參考下
    2021-06-06
  • 淺析Python中的getattr(),setattr(),delattr(),hasattr()

    淺析Python中的getattr(),setattr(),delattr(),hasattr()

    這篇文章主要介紹了Python中的getattr(),setattr(),delattr(),hasattr() 的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • pytorch 實(shí)現(xiàn)在一個(gè)優(yōu)化器中設(shè)置多個(gè)網(wǎng)絡(luò)參數(shù)的例子

    pytorch 實(shí)現(xiàn)在一個(gè)優(yōu)化器中設(shè)置多個(gè)網(wǎng)絡(luò)參數(shù)的例子

    今天小編就為大家分享一篇pytorch 實(shí)現(xiàn)在一個(gè)優(yōu)化器中設(shè)置多個(gè)網(wǎng)絡(luò)參數(shù)的例子,具有很好參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解

    Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解

    這篇文章主要介紹了Python集成開(kāi)發(fā)工具Pycharm的安裝和使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論

中卫市| 辰溪县| 颍上县| 吴忠市| 祥云县| 文登市| 蓬安县| 迁安市| 沅江市| 清徐县| 汨罗市| 平和县| 花垣县| 玛多县| 栾川县| 虎林市| 社旗县| 禄劝| 龙口市| 柞水县| 久治县| 本溪市| 芜湖市| 四会市| 富源县| 福贡县| 日喀则市| 长兴县| 济阳县| 安阳县| 新余市| 灌阳县| 宝坻区| 玉门市| 溧水县| 和龙市| 闸北区| 尚志市| 平泉县| 阿克陶县| 洞口县|