ওও ডিজাইন, টোনাল হারমনি কীভাবে মডেল করবেন?


12

আমি সি ++ 11 তে একটি প্রোগ্রাম লিখতে শুরু করেছি যা জমি, আইশ এবং সামঞ্জস্য বিশ্লেষণ করবে। আমি আমার ডিজাইনের পর্যায়ে সবচেয়ে বড় সমস্যাটি হচ্ছি, হ'ল নোটটি 'সি' হ'ল একটি নোট, এক ধরণের জ্যা (Cmaj, Cmin, C7, ইত্যাদি) এবং এক ধরণের কী (Cmajor, Cminor এর কী)। একই সমস্যা অন্তরগুলির সাথে উত্থাপিত হয় (মাইনর 3 য়, বড় 3 য়)।

আমি টোকেন একটি বেস ক্লাস ব্যবহার করছি, এটি প্রোগ্রামে সমস্ত 'প্রতীক' এর জন্য বেস ক্লাস। উদাহরণস্বরূপ:

class Token {
public:
    typedef shared_ptr<Token> pointer_type;
    Token() {}
    virtual ~Token() {}
};

class Command : public Token {
public:
    Command() {}
    pointer_type execute();
}

class Note : public Token;

class Triad : public Token; class MajorTriad : public Triad; // CMajorTriad, etc

class Key : public Token; class MinorKey : public Key; // Natural Minor, Harmonic minor,etc

class Scale : public Token;

যেমন আপনি দেখতে পাচ্ছেন, উদ্ভূত সমস্ত ক্লাস তৈরি করতে (সিএমজোরট্রিড, সি, সিএমজোরস্কেল, সিএমজোরকি, ইত্যাদি) অন্যান্য সমস্ত নোটের পাশাপাশি এনহরমনিক্স সহ হাস্যকরভাবে জটিল হয়ে উঠবে। একাধিক উত্তরাধিকার কাজ করবে না, অর্থাত:

class C : public Note, Triad, Key, Scale

ক্লাস সি, একই সাথে এই সমস্ত জিনিস হতে পারে না। এটি প্রাসঙ্গিক, এছাড়াও এটি দিয়ে পলিমারফিং কাজ করবে না (কোন সুপার পদ্ধতিগুলি সম্পাদন করতে হবে তা কীভাবে নির্ধারণ করবেন? প্রতিটি সুপার ক্লাস কনস্ট্রাক্টরকে কল করা এখানে হওয়া উচিত নয়)

লোকেরা যে কোনও ডিজাইনের ধারণা বা পরামর্শ দিতে পারে? ওও দৃষ্টিকোণ থেকে টোনাল সম্প্রীতির মডেলিংয়ের ক্ষেত্রে আমি গুগলে কিছুই খুঁজে পাচ্ছি না। এখানে সমস্ত ধারণার মধ্যে অনেক বেশি সম্পর্ক রয়েছে।


8
'সি' ক্লাস হবে কেন? আমি 'নোট', 'জ্যাকেট' ইত্যাদি কল্পনা করব এমন ক্লাস হবে, যার একটি মান গণনা থাকতে পারে যাতে এনাম 'সি' অংশ নিতে পারে।
রোটেম

ব্যবহারকারী যদি ইনপুটস>> জ্যা সিজি করেন, নোটগুলি উপযুক্ত জ্যাড গঠনের জন্য কি তা অনুমিত করতে হবে। আমি <নোটস> এর কোনও ভেক্টরে এক্সিকিউট () পদ্ধতির প্যারাম হিসাবে পাস করার কথা ভাবছিলাম, যা সমস্তই বহুতলিকভাবে পরিচালিত হবে। তবে একটি এনুমरेटर ব্যবহার করে বোঝা যাবে, তবে তারপরে আমি যে এনামটি ব্যবহার করতে চাইছি তা দিয়ে প্রতিটি বস্তু ইনস্ট্যান্ট করা দরকার।
Igneous01

আমি এর সাথে @ রোটেমের সাথে রয়েছি: কখনও কখনও, আপনাকে উত্তরাধিকারের চেয়ে অবজেক্ট রচনা পছন্দ করতে হয়।
Spoike

এটা আমার কাছে এটি কি আপনি চান সম্পর্কে ভাবতে সহায়ক হতে পারে বলে মনে হয় না এই নোট / জ্যা / স্কেল শ্রেণীর সঙ্গে। আপনি শীট সংগীত উত্পাদন করতে যাচ্ছেন? মিডির ফাইল? স্কোরগুলিতে রূপান্তরগুলি (স্থানান্তরকরণ, সমস্ত নোটের দৈর্ঘ্য দ্বিগুণ করা, একটি নির্দিষ্ট নোটের উপরে সমস্ত পুরো নোটগুলিতে ট্রিল যুক্ত করা ইত্যাদি)? আপনার যখন কোনও সম্ভাব্য শ্রেণিবদ্ধ কাঠামো তৈরি হয়ে যায়, আপনি কীভাবে এই কাজগুলি সম্পাদন করতে পারবেন তা ভেবে দেখুন। যদি এটি বিশ্রী মনে হয়, তবে আপনি একটি ভিন্ন শ্রেণি কাঠামো চান।
ম্যাট্রিক্সফ্রোগ

উত্তর:


9

আমি মনে করি এই সত্তাগুলির মধ্যে প্রকৃত সম্পর্ক পুনরুত্পাদন করা সবচেয়ে ভাল উপায় approach

উদাহরণস্বরূপ, আপনি থাকতে পারেন:

  • একটি Noteবস্তু, যার বৈশিষ্ট্য

    • নাম (সি, ডি, ই, এফ, জি, এ, বি)

    • দুর্ঘটনাজনিত (প্রাকৃতিক, সমতল, ধারালো)

    • ফ্রিকোয়েন্সি বা অন্য অনন্য পিচ সনাক্তকারী

  • একটি Chordবস্তু, যার বৈশিষ্ট্য

    • Noteবস্তুর একটি অ্যারে

    • নাম

    • আপতিক

    • গুণমান (বড়, নাবালক, হ্রাসমান, বৃদ্ধি, স্থগিত)

    • সংযোজন (7, 7+, 6, 9, 9+, 4)

  • একটি Scaleবস্তু, যার বৈশিষ্ট্য

    • Noteবস্তুর একটি অ্যারে

    • নাম

    • প্রকার (প্রধান, প্রাকৃতিক নাবালক, সুর গৌণ, সুরেলা নাবালক)

    • মোড (আয়নিয়ান, ডরিয়ান, ফ্রাইগিয়ান, লিডিয়ান, মিক্সোলিডিয়ান, আইওলিয়ান, লোকিয়ান)

তারপরে, যদি আপনার ইনপুটটি পাঠ্যগত হয় তবে আপনি নোটের নাম, দুর্ঘটনাক্রমে এবং (যদি আপনার প্রয়োজন হয়) অকটভ সহ একটি স্ট্রিং সহ নোট তৈরি করতে পারেন।

উদাহরণস্বরূপ (সিউডোকোড, আমি সি ++ জানি না):

note = new Note('F#2');

তারপরে, Noteশ্রেণিতে আপনি স্ট্রিংকে বিশ্লেষণ করতে এবং বৈশিষ্ট্যগুলি সেট করতে পারেন।

একটি Chordএটির নোট দ্বারা নির্মিত যেতে পারে:

chord = new Chord(['C2', 'E2', 'G2']);

... বা নাম, গুণমান এবং অতিরিক্ত নোট সহ স্ট্রিং দ্বারা:

chord = new Chord('Cmaj7');

আপনার অ্যাপ্লিকেশনটি ঠিক কী করবে তা আমি জানি না, সুতরাং এগুলি কেবলমাত্র ধারণা।

আপনার আকর্ষণীয় প্রকল্পের জন্য শুভকামনা!


4

কিছু জেনেরিক পরামর্শ।


ক্লাস ডিজাইনে যদি অনেক অনিশ্চয়তা আশা করা যায় (যেমন আপনার পরিস্থিতিতে) তবে আমি বিভিন্ন প্রতিযোগিতামূলক ক্লাস ডিজাইনের সাথে পরীক্ষার পরামর্শ দেব recommend

এই পর্যায়ে সি ++ ব্যবহার করা অন্যান্য ভাষার মতো উত্পাদনশীল নাও হতে পারে। (এই সমস্যা আপনার কোড টুকরা সঙ্গে মোকাবিলা করার জন্য তার মধ্যে আপাত typedefএবং virtualdestructors।) প্রকল্পের লক্ষ্য সি ++ কোড উত্পাদন করা হয়, এমনকি যদি, এটা অন্য ভাষায় প্রাথমিক শ্রেণী নকশা করতে উৎপাদনশীল হতে পারে। (উদাহরণস্বরূপ জাভা, যদিও অনেক পছন্দ রয়েছে))

কেবল একাধিক উত্তরাধিকারের কারণে সি ++ পছন্দ করবেন না। একাধিক উত্তরাধিকার এর ব্যবহার রয়েছে তবে এই সমস্যার মডেল করার সঠিক উপায় নয় (সংগীত তত্ত্ব)।


বিশৃঙ্খলার জন্য বিশেষ মনোযোগ দিন। যদিও ইংরেজি (পাঠ্য) বিবরণে অস্পষ্টতা প্রচুর পরিমাণে রয়েছে, ওওপি ক্লাসগুলি ডিজাইন করার সময় এই অস্পষ্টতাগুলি অবশ্যই সমাধান করা উচিত।

আমরা নোট হিসাবে জি এবং জি শার্পের কথা বলি । আমরা জি মেজর এবং জি মাইনরকে আইশ বলে speak সুতরাং, Noteএবং Scaleবিনিময়যোগ্য ধারণা নয়। এমন কোনও বস্তু থাকতে পারে না যা একই সাথে ক Noteএবং ক এর উদাহরণ হতে পারে Scale

এই পৃষ্ঠাটি একটি কয়েক ডায়াগ্রামে সেই সম্পর্ক চিত্রিত রয়েছে: http://www.howmusicworks.org/600/ChordScale-Relations/Chord-and-Scale-Relations

অন্য একটি উদাহরণ, "একটি Triad যে দিয়ে শুরু হয় জি একটি উপর সি প্রধান স্কেল" একই অর্থ হিসাবে "একটি Triad যে নেই দিয়ে শুরু হয় সি একটি উপর জি প্রধান স্কেল"।

এই প্রাথমিক পর্যায়ে, Tokenবর্গ (সমস্ত কিছুর সুপারক্লাস) অনিয়ন্ত্রিত, কারণ এটি দ্ব্যর্থতা রোধ করে। প্রয়োজনে এটি পরে প্রবর্তিত হতে পারে (কোনও কোড খণ্ড দ্বারা সমর্থিত যা এটি কীভাবে কার্যকর হতে পারে তা দেখায়))


শুরু করার জন্য, Noteক্লাস ডায়াগ্রামের কেন্দ্রবিন্দু দিয়ে শুরু করুন, তারপরে ধীরে ধীরে Noteক্লাস রিলেশন ডায়াগ্রামের সাথে সম্পর্কগুলি (ডেটার টুকরোগুলির সাথে যুক্ত হওয়া প্রয়োজন ) যুক্ত করুন ।

একটি সি নোট Noteশ্রেণীর উদাহরণ । একটি সি নোট বৈশিষ্ট্য যে এই ধরনের সংশ্লিষ্ট ত্রয়ী হিসাবে এই নোটটি সাথে সম্পর্কিত হয়, এবং তার আপেক্ষিক অবস্থান (ফিরে আসবে Intervalএকটি সম্মান সঙ্গে) Scaleযে শুরু একটি সঙ্গে সি নোট।

একই শ্রেণীর উদাহরণগুলির মধ্যে সম্পর্কের (উদাহরণস্বরূপ, সি নোট এবং একটি নোটের মধ্যে) সম্পত্তি হিসাবে মডেল করা উচিত, উত্তরাধিকার নয়।

তদুপরি, আপনার উদাহরণগুলিতে অনেকগুলি আন্তঃ-শ্রেণীর সম্পর্কগুলিও যথাযথভাবে বৈশিষ্ট্য হিসাবে মডেল করা হয়। উদাহরণ:

(কোড উদাহরণগুলি মুলতুবি রয়েছে কারণ আমার পুনরায় সংগীত তত্ত্বটি শেখার প্রয়োজন ...)


আকর্ষণীয় চিন্তাভাবনা, তবে কীভাবে সুরেলা বিশ্লেষণের প্রেক্ষাপটে জোর গুণগুলি নির্ধারণ করা যায়? সি Chord উদাহরণস্বরূপ মানসম্পন্ন সম্পত্তি থাকা দরকার, যা নাবালিকাকে সেট করা হয় (যা ঠিক আছে) তবে তারপরে প্রভাবশালী / হ্রাস / বৃদ্ধ / মাইনর 7s, 9, 11 জনের কী হবে? একক নোট অন্তর্ভুক্ত করতে পারে এমন অনেকগুলি চিয়ার্ড রয়েছে। কোডের বিশ্লেষণ বিভাগে বিভিন্ন ধরণের জ্যা এবং তার সম্পর্কিত গুণাবলী কী কী তা আমি নির্ধারণ করব?
Igneous01

আমি খুব কম সংগীত তত্ত্ব জানি, তাই আমি আপনার প্রশ্নের উত্তর দিতে পারছি না। একটি উপায় যা আমাকে বুঝতে সাহায্য করতে পারে তা হল একটি টেবিল সন্ধান করা যা এই ধারণাগুলিতে জড়িত সমস্ত নোটকে তালিকাবদ্ধ করে। Chords জন্য প্রশ্নগুলি অতিরিক্ত পরামিতি নিতে পারে।
rwong

2
এখানে সমস্ত সম্ভাব্য তীরগুলির একটি খুব সুন্দর তালিকা রয়েছে: en.wikedia.org/wiki/List_of_chords সমস্ত chords যে কোনও নোটের জন্য প্রয়োগ করা যেতে পারে, আমার পরিস্থিতিটির সাথে গুরুত্বপূর্ণ যেটি হল enharmonics সঠিক: অর্থাৎ। সিফ্ল্যাট মেজর! = বিএমাজোর, তারা পিয়ানোতে শারীরিকভাবে একই জ্যাড, তবে তাদের সুরেলা ফাংশনগুলি কাগজে খুব আলাদা। আমি ভাবছি যে কোনও নোটকে তীক্ষ্ণ / চ্যাপ্টা করার জন্য একজন গণ্যকারী নোটের উদাহরণের জন্য সর্বাধিক অর্থপূর্ণ হবে। এইভাবে সি। শার্পেন () = সি #, এবং সি.ফ্ল্যাটেন () = সিবি, এটি ব্যবহারকারীর জালগুলি যাচাই করা আমার পক্ষে আরও সহজ করে তুলবে।
Igneous01

2

মূলত, বাদ্যযন্ত্র নোটগুলি ফ্রিকোয়েন্সি এবং সঙ্গীত বিরতি হ'ল ফ্রিকোয়েন্সি অনুপাত।

অন্য সব কিছুর উপরে নির্মিত যেতে পারে।

একটি জ্যাণ্ড অন্তরগুলির একটি তালিকা। একটি স্কেল একটি মৌলিক নোট এবং একটি সুর ব্যবস্থা। একটি টিউনিং সিস্টেম অন্তরগুলির একটি তালিকা।

আপনি কীভাবে তাদের নাম রাখেন এটি একটি সাংস্কৃতিক নিদর্শন।

উইকিপিডিয়া সংগীত তত্ত্ব নিবন্ধ একটি দুর্দান্ত সূচনা পয়েন্ট।


আকর্ষণীয়, যদিও আমি নিশ্চিত নই যে অন্তর্নিহিত শারীরিক বাস্তবতার নিরিখে সিস্টেমটি মডেল করা প্রয়োজনীয়ভাবে সহায়ক। মনে রাখবেন, মডেলটির একটি বিশেষ দিকটি উচ্চারণে সহায়ক হতে হবে , প্রয়োজনীয় বা বিস্তৃত এমনকি সঠিক হওয়া প্রয়োজন না। আপনার দৃষ্টিভঙ্গি নির্ভুল এবং বিস্তৃত উভয়ই হতে পারে, তবে এটি ওপির ব্যবহারের ক্ষেত্রে খুব নিম্ন স্তরের হতে পারে।
কনরাড রুডল্ফ

@ কনরাডরুডল্ফ - আমার চূড়ান্ত অবস্থানের সাথে আমি কেবল এটিই নির্দেশ করতে চেয়েছিলাম যে প্রেজেন্টেশন স্তরের সাথে অন্তর্নিহিত মডেলটি কোনওভাবেই মিশ্রিত করা উচিত নয়, দিবালোকের সময় সাশ্রয়ের সময়গুলির মতো: মডেলটিতেই গণনা অনেক সহজ। আমি সম্মত হই যে সর্বাধিক সহায়ক বিমূর্ততা স্তরটি আমি যা প্রস্তাব করি তা নয়, তবে আমি অনুভব করি যে ওপি দ্বারা প্রস্তাবিত বিমূর্ততা স্তরটি পর্যাপ্তও নয়।
mouviciel

এই প্রোগ্রামটির উদ্দেশ্য অগত্যা সঙ্গীতটির শারীরিক বাস্তবতা প্রদর্শন করা নয়। তবে তত্ত্ব অধ্যয়নকারী ব্যক্তিদের জন্য (আমার মতো) খুব তাড়াতাড়ি কিছু জেলাগুলিতে প্লট করতে সক্ষম হতে পারে এবং প্রোগ্রামটি তার সর্বোত্তম দক্ষতার সাথে ব্যাখ্যা করতে পারে যে কীভাবে এই কর্ডগুলি সুরেলা অর্থে একে অপরের সাথে সম্পর্কিত। আমি এটি পরিমাপ করে স্কোর পরিমাপটি পড়ার চেষ্টা করা এবং সত্যিকারের উপায়টি বিশ্লেষণ করতে পারি, তবে জিনিসগুলি আরও সহজ করার জন্য এটি আরও একটি সরঞ্জাম এবং বিশ্লেষণ করার সময় আরও সূক্ষ্ম বিবরণে ফোকাস করতে সক্ষম হওয়া।
Igneous01

1

আমি এই দ্বন্দ্বকে আকর্ষণীয় মনে করছি।

নোটগুলি কি মিডির মাধ্যমে (বা কোনও ধরণের টোন ক্যাপচার ডিভাইস) ইনপুট করা হচ্ছে বা চিঠি এবং চিহ্নগুলি লিখে এগুলি প্রবেশ করা হচ্ছে?

সি থেকে ডি-শার্প / ই-ফ্ল্যাট পর্যন্ত ব্যবধানের ক্ষেত্রে:

যদিও ডি-শার্প এবং ই-ফ্ল্যাট একই টোন (প্রায় 311Hz যদি A = 440Hz হয়) তবে সি -> ডি-শার্প থেকে অন্তরটি একটি বর্ধিত দ্বিতীয় লেখা হয়, যখন সি -> ই-ফ্ল্যাট থেকে ব্যবধানটি লিখিতভাবে লেখা হয় গৌণ 3 য়। নোটটি কীভাবে লেখা হয়েছিল তা যদি আপনি জানেন তবে যথেষ্ট সহজ। আপনার কাছে কেবল দুটি টোন আছে কিনা তা নির্ধারণ করা অসম্ভব।

এই ক্ষেত্রে, আমি বিশ্বাস করি যে আপনিও উল্লেখ করেছেন .শার্পেন () এবং .ফ্লেটেন () পদ্ধতিগুলির সাথে যেমন .SemiToneUp (), .ফুলটোনডাউন (), ইত্যাদির সাথে স্বন বৃদ্ধি / হ্রাস করার একটি উপায়ও প্রয়োজন হবে তাই আমি বিশ্বাস করি so যে আপনি তীব্র / ফ্ল্যাট হিসাবে "রঙ" না করে স্কেলগুলিতে পরবর্তী নোটগুলি পেতে পারেন।

আমাকে @ রোটেমের সাথে একমত হতে হবে যে "সি" একটি শ্রেণি এবং নিজের মধ্যে নয়, বরং নোট শ্রেণির একটি ইনস্ট্যান্টেশন।

আপনি যদি কোনও নোটের জন্য বৈশিষ্ট্যগুলি সংজ্ঞায়িত করেন, সেমিটোন হিসাবে সমস্ত অন্তর অন্তর্ভুক্ত করে, তবে প্রাথমিক নোটের মান ("সি", "এফ", "জি #" নির্বিশেষে) আপনি বলতে পারবেন যে একটি তিনটি নোট ক্রম রয়েছে মূল, প্রধান তৃতীয় (এম 3), তারপরে অপ্রাপ্তবয়স্ক তৃতীয় (এম 3) একটি বড় ট্রায়ড হবে। একইভাবে, এম 3 + এম 3 একটি গৌণ ত্রয়ী, এম 3 + এম 3 হ্রাস, এম 3 + এম 3 বৃদ্ধি করেছে। তদ্ব্যতীত, এটি আপনাকে 11 টি, হ্রাসকৃত 13 তম ইত্যাদির সন্ধানের জন্য সমস্ত 12 বেস নোটগুলির জন্য স্পষ্টভাবে কোডিং না করে এবং তাদের অষ্টভুজকে উপরে এবং নীচে সজ্জিত করার একটি উপায় দেয়।

এটি হয়ে গেলে, আপনার এখনও কিছু সমস্যা সমাধানের বাকি রয়েছে।

ত্রিয়ার সি, ই, জি নিন। একজন সংগীতশিল্পী হিসাবে, আমি এটি পরিষ্কারভাবে একটি Cmaj জ্যা হিসাবে দেখছি। তবে, আমার মধ্যে বিকাশকারী এই সংযোজনটিকে ই মাইনর অগমেন্ট 5 (রুট ই + এম 3 + এ 5) বা জিএসস 4 6th ষ্ঠ নং 5 (রুটজি + 4 + 6) হিসাবে ব্যাখ্যা করতে পারে।

সুতরাং, বিশ্লেষণটি সম্পর্কে আপনার প্রশ্নের জবাব দেওয়ার জন্য, আমি মনে করি যে মড্যালিটি নির্ধারণ করার সবচেয়ে ভাল উপায় (মাজ, অপ্রাপ্তবয়স্ক, ইত্যাদি) প্রবেশ করানো সমস্ত নোট গ্রহণ করা, তাকে আরোহণের সেমেটোন মান হিসাবে সাজানো এবং পরিচিত জ্যাকেট ফর্মগুলির বিরুদ্ধে তাদের পরীক্ষা করা হবে to । তারপরে, মূল নোট হিসাবে প্রবেশ করা প্রতিটি নোট ব্যবহার করুন এবং একই সেটগুলির মূল্যায়ন করুন।

আপনি জ্যাজ ফর্মগুলি ওজন করতে পারেন যাতে আরও সাধারণ (প্রধান, নাবালক) বর্ধিত, স্থগিত, ইলেক্ট্রা ইত্যাদির জলের ফর্মগুলির চেয়ে অগ্রাধিকার অর্জন করতে পারে তবে একটি সঠিক বিশ্লেষণে সমস্ত মিলে যাওয়া জোর ফর্মগুলি সম্ভাব্য সমাধান হিসাবে উপস্থাপনের প্রয়োজন হবে।

আবার উল্লিখিত উইকিপিডিয়া নিবন্ধটি পিচ ক্লাসগুলি তালিকাভুক্ত করার জন্য ভাল কাজ করে, তাই জমিগুলির মডেলগুলি কোড করা, প্রবেশ করা নোটগুলি গ্রহণ করা, তাদের পিচ ক্লাস / বিরতিতে অর্পণ করা এবং তারপরে তুলনা করা সহজ (ক্লান্তিকর) হওয়া উচিত ম্যাচগুলির জন্য পরিচিত ফর্মগুলির বিরুদ্ধে।

এটা অনেক মজা হয়েছে। ধন্যবাদ!


আপাতত পাঠ্যের মাধ্যমে সেগুলি ইনপুট করা হচ্ছে। তবে পরে প্রোগ্রামটি যথাযথভাবে এনপ্যাপুলেটেড করা থাকলে আমি মিডি ব্যবহার করতে সক্ষম হতে পারি। শিশুর এই মুহূর্তে পদক্ষেপ: ডি
Igneous01

0

টেমপ্লেটগুলির জন্য কেসের মতো শোনাচ্ছে। আপনি একটি আছে বলে মনে হচ্ছে template <?> class Major : public Chord;তাই Major<C>নয়-একটি Chord, যেমন হয় Major<B>। একইভাবে, Note<?>উদাহরণস্বরূপ Note<C>এবং আপনার একটি টেম্পলেটও রয়েছে Note<D>

আমি একমাত্র জিনিসটি রেখেছি ?। মনে হচ্ছে আপনার একটি আছে enum {A,B,C,D,E,F,G}তবে আমি জানি না আপনি কীভাবে এই এনামটির নাম রাখবেন।


0

সমস্ত পরামর্শের জন্য আপনাকে ধন্যবাদ, একরকম আমি অতিরিক্ত প্রতিক্রিয়াগুলি মিস করতে পেরেছি। এখনও পর্যন্ত আমার ক্লাসগুলি এর মতো ডিজাইন করা হয়েছে:

Note
enum Qualities - { DFLAT = -2, FLAT, NATURAL, SHARP, DSHARP }
char letter[1] // 1 char letter
string name // real name of note
int value // absolute value, the position on the keyboard for a real note (ie. c is always 0)
int position // relative position on keyboard, when adding sharp/flat, position is modified
Qualities quality // the quality of the note ie sharp flat

আমার অন্তর এবং জলের গণনার সমস্যাগুলি সমাধান করার জন্য, আমি বিজ্ঞপ্তিযুক্ত বাফারটি ব্যবহার করার সিদ্ধান্ত নিয়েছি, যা আমাকে পরবর্তী বিন্যাসের সাথে মেলে না এমন আগ পর্যন্ত যে কোনও বিন্দু থেকে বাফারটি অতিক্রম করতে দেয়।

বর্ণিত ব্যবধানটি খুঁজে পেতে- আসল নোটস বাফারটিকে অতিক্রম করুন, যখন অক্ষরগুলি মিলবে (কেবলমাত্র চিঠিটি, প্রকৃত নোট বা অবস্থান নয়) তাই সি - জি # = 5

আসল দূরত্বটি খুঁজে পাওয়ার জন্য 12 আরও পূর্ণসংখ্যার আরেকটি বাফারকে অতিক্রম করতে, শীর্ষ নোটের অবস্থানটি সূচকে বাফারের মানের সমান হলে আবার থামুন, আবার এটি কেবল এগিয়ে চলেছে। তবে অফসেটটি যে কোনও জায়গায় (যেমন: বাফার.্যাট (-10)) হতে পারে

এখন আমি উভয়ই ব্যাখ্যা করা ব্যবধান এবং উভয়ের মধ্যে শারীরিক দূরত্ব জানি। অন্তর্বর্তী নাম ইতিমধ্যে অর্ধেক সম্পূর্ণ।

এখন আমি অন্তর অর্থাত্ ব্যাখ্যা করতে সক্ষম am যদি বিরতিটি 5 হয় এবং দূরত্ব 8 হয় তবে এটি একটি 5 5th

এখন পর্যন্ত নোট এবং অন্তরটি প্রত্যাশার মতো কাজ করছে, এখন আমাকে কেবল জ্যা শনাক্তকারীকে মোকাবেলা করতে হবে।

আবার ধন্যবাদ, আমি এই প্রতিক্রিয়াগুলির কিছুটি আবার পড়ব এবং এখানে কিছু ধারণা যুক্ত করব।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.